函數的參數


函數參數的兩個類型

1.形式參數

在函數定義階段括號內所填寫的參數簡稱:形參

1  def func(a, b):
2             pass
3 # a和b就是函數func的形參

2.實際參數

在函數調用階段括號內傳入的參數簡稱:實參

1 func(1,2)
2 # 數據1和2就是函數func的實參
1 """
2 形參與實參的關系
3     我們可以將形參看成是變量名 實參看成是變量值
4         兩者在函數調用階段臨時綁定 函數運行結束斷開    
5     
6 形參的表現形式只有一種就是變量名
7 實參的表現形式有很多種(但是把握核心 就是 數據值)
8 """

 

 

位置參數

1.位置參數

按照從左往右的順序依次填入的參數

2.位置形參

在函數定義階段括號內按照從左往右的順序依次填入的變量名

3.位置實參

在函數調用階段括號內按照從左往右的順序依次傳入的數據值

1 # 定義一個可以比較大小的函數(傳入兩個值 返回較大的)

4.關鍵字實參(可以打破位置順序)

在函數調用階段通過形參名=數據值的形式指名道姓的傳值

1 """
2 1.位置形參與位置實參在函數調用階段 按照位置一一對應綁定
3 2.位置參數在綁定的時候多一個不行少一個也不行
4 """
5    
6 '''格式越簡單的越靠前 格式越復雜的越靠后'''

 

 

默認參數

1 默認參數
2     默認形參
3         函數在定義階段就可以給形參賦值了
4             1.該形參在函數調用階段如果不給值 則使用默認的
5             2.該形參在函數調用階段也可以繼續給值 則使用你給的
1 # 定義學員注冊功能
2     def register(name, age, gender='male'):
3         print('%s:%s:%s' % (name, age, gender))
4     register('jason', 18)
5     register('tony', 28)
6     register('kevin', 38)
7     register('lili', 18, 'female')
8     register('lili', 18, gender='female')
"""
位置形參與默認值形參在定義的時候
    位置形參必須在默認值形參的前面
"""
'''格式越簡單的越靠前 格式越復雜的越靠后'''

可變長參數

1.函數無論傳多少位置參數都可以正常運行

1 #可變長形參
2 # def func(x,y,*a):
3 #     print(x,y,a)
4 # func()  # ()
5 # func(1)  # (1,)
6 # func(1, 2, 3, 4, 5, 6, 7)  # (1, 2, 3, 4, 5, 6, 7)
7 # func(1,2)  # 1 2 ()
8 # func(1,2,3,4,5,6,7,8,9)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
9 # func(1,2)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
*號在形參中的使用
用於接收多余的位置參數 並組織成元組的形式賦值給*號后面的變量名

2.函數無論傳入多少關鍵字參數都可以正常運行

1  def index(x, y, **b):
2      print(x, y, b)
3  index()  # {}
4  index(a=1,b=2,c=3,d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
5  index(y=2, x=1)  # 1 2 {}
6  index(y=2, x=1, u=222, k=111, l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}

 

 **號在形參中的使用
用於接收多余的關鍵字參數 並組織成字典的形式賦值給**號后面的變量名

3.定義一個函數無論傳入多少位置參數和關鍵字參數都可以正常運行

 def index(*a,**b):
     print(a,b)
 index()  # () {}
 index(1,2,3,4)  # (1, 2, 3, 4) {}
 index(a=1,b=2,c=3)  # () {'a': 1, 'b': 2, 'c': 3}
 index(1,2,3,4,a=1,b=2,c=3)  # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}

墨守成規

可變長形參 *與**后面的變量名其實是可以隨便定義的

但是python中推薦使用

1 *args  
2         **kwargs 
3 def index(*args, **kwargs):
4     pass
 1 # def index(a, b, c):
 2 #     print(a,b,c)
 3 # new_list = [11,22,33]
 4 # index(new_list)  # 肯定不行  列表是一個整體 相當於一個實參
 5 # index(new_list[0],new_list[1],new_list[2])  # 可以
 6 '''如果index形參是*args 列表里面有很多元素 如何實現按照位置一一傳入'''
 7 # def index1(*args):
 8 #     print(args)
 9 # new_list1 = [11,22,33,44,55,66,77,88,99]
10 # index1(*new_list1)  # index1(11,22,33,44,55,66,77,88,99)
11 """
12 *號在實參中的使用
13     會將列表、元組內的元素打散成位置參數的形式一一傳值
14 """
15 
16 # def index2(**kwargs):
17 #     print(kwargs)
18 new_dict = {'username':'jason','pwd':123}
19 # index2(**new_dict)  # index2(username='jason',pwd=123)
20 # {'username': 'jason', 'pwd': 123}
21 """
22 **號在實參中的使用
23     會將字典內的鍵值對打散成關鍵字參數傳入
24 """

 

 

函數參數補充

1.命名關鍵字參數

 1     def register(name,age,*,sex,height):
 2         pass
 3 
 4     # register('jason',18,'male',183)
 5     register('lili',18,sex='male',height='1.8m') #正確使用
 6     """
 7     sex height在傳入實參的時候必須以關鍵字參數的形式
 8 
 9     ps:該類型的參數幾乎不用 也幾乎很少能碰到
10     """

名稱空間

1.什么是名稱空間(namespaces)

用於存放變量名與變量值綁定關系的地方(類似於民政局)

2.名稱空間的分類

內置名稱空間

python解釋器提前給你定義好的

1 print()
2 len()
3 ...

3.全局名稱空間

在py文件中頂格編寫的代碼運行之后都會存入全局名稱空間

1             name = 'jason'  # name全局
2             def func():  # func全局
3                 pass
4             if 1:
5                 a = 123  # a全局
6             for i in range(10):
7                 print(i)  # i全局
8             while True:
9                 a = 123  # a全局

4.局部名稱空間

函數體代碼運行之后產生的都是局部名稱空間

5.存活周期

 

1.內置名稱空間
python解釋器啟動與關閉而創建和銷毀
2.全局名稱空間
隨着py文件的運行與結束而創建和銷毀
3.局部名稱空間
隨着函數體代碼的執行與結束而創建和銷毀

名字的查找順

在查找名字的時候 要先確定自己當前在哪序

1.如果你在局部

局部 >>> 全局 >>> 內置

2.如果你在全局

全局 >>> 內置

3.局部名稱空間的嵌套

 1 '''函數在定義階段名字的查找順序就已經固定死了(特例)'''
 2 x = 111
 3 def f1():
 4     x = 222
 5     def f2():
 6         x = 333
 7         def f3():
 8             x = 444
 9             def f4():
10                 x = 555
11                 print(x)
12                 # x = 555  特例
13             f4()
14         f3()
15     f2()
16 # 通過調用f1 執行所有的函數
17 f1()

 

------------恢復內容開始------------

函數參數的兩個類型

1.形式參數

在函數定義階段括號內所填寫的參數簡稱:形參

1  def func(a, b):
2             pass
3 # a和b就是函數func的形參

2.實際參數

在函數調用階段括號內傳入的參數簡稱:實參

1 func(1,2)
2 # 數據1和2就是函數func的實參
1 """
2 形參與實參的關系
3     我們可以將形參看成是變量名 實參看成是變量值
4         兩者在函數調用階段臨時綁定 函數運行結束斷開    
5     
6 形參的表現形式只有一種就是變量名
7 實參的表現形式有很多種(但是把握核心 就是 數據值)
8 """

 

 

位置參數

1.位置參數

按照從左往右的順序依次填入的參數

2.位置形參

在函數定義階段括號內按照從左往右的順序依次填入的變量名

3.位置實參

在函數調用階段括號內按照從左往右的順序依次傳入的數據值

1 # 定義一個可以比較大小的函數(傳入兩個值 返回較大的)

4.關鍵字實參(可以打破位置順序)

在函數調用階段通過形參名=數據值的形式指名道姓的傳值

1 """
2 1.位置形參與位置實參在函數調用階段 按照位置一一對應綁定
3 2.位置參數在綁定的時候多一個不行少一個也不行
4 """
5    
6 '''格式越簡單的越靠前 格式越復雜的越靠后'''

 

 

默認參數

1 默認參數
2     默認形參
3         函數在定義階段就可以給形參賦值了
4             1.該形參在函數調用階段如果不給值 則使用默認的
5             2.該形參在函數調用階段也可以繼續給值 則使用你給的
1 # 定義學員注冊功能
2     def register(name, age, gender='male'):
3         print('%s:%s:%s' % (name, age, gender))
4     register('jason', 18)
5     register('tony', 28)
6     register('kevin', 38)
7     register('lili', 18, 'female')
8     register('lili', 18, gender='female')
"""
位置形參與默認值形參在定義的時候
    位置形參必須在默認值形參的前面
"""
'''格式越簡單的越靠前 格式越復雜的越靠后'''

可變長參數

1.函數無論傳多少位置參數都可以正常運行

1 #可變長形參
2 # def func(x,y,*a):
3 #     print(x,y,a)
4 # func()  # ()
5 # func(1)  # (1,)
6 # func(1, 2, 3, 4, 5, 6, 7)  # (1, 2, 3, 4, 5, 6, 7)
7 # func(1,2)  # 1 2 ()
8 # func(1,2,3,4,5,6,7,8,9)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
9 # func(1,2)  # 1 2 (3, 4, 5, 6, 7, 8, 9)
*號在形參中的使用
用於接收多余的位置參數 並組織成元組的形式賦值給*號后面的變量名

2.函數無論傳入多少關鍵字參數都可以正常運行

1  def index(x, y, **b):
2      print(x, y, b)
3  index()  # {}
4  index(a=1,b=2,c=3,d=4)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
5  index(y=2, x=1)  # 1 2 {}
6  index(y=2, x=1, u=222, k=111, l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}

 

 **號在形參中的使用
用於接收多余的關鍵字參數 並組織成字典的形式賦值給**號后面的變量名

3.定義一個函數無論傳入多少位置參數和關鍵字參數都可以正常運行

 def index(*a,**b):
     print(a,b)
 index()  # () {}
 index(1,2,3,4)  # (1, 2, 3, 4) {}
 index(a=1,b=2,c=3)  # () {'a': 1, 'b': 2, 'c': 3}
 index(1,2,3,4,a=1,b=2,c=3)  # (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}

墨守成規

可變長形參 *與**后面的變量名其實是可以隨便定義的

但是python中推薦使用

1 *args  
2         **kwargs 
3 def index(*args, **kwargs):
4     pass
 1 # def index(a, b, c):
 2 #     print(a,b,c)
 3 # new_list = [11,22,33]
 4 # index(new_list)  # 肯定不行  列表是一個整體 相當於一個實參
 5 # index(new_list[0],new_list[1],new_list[2])  # 可以
 6 '''如果index形參是*args 列表里面有很多元素 如何實現按照位置一一傳入'''
 7 # def index1(*args):
 8 #     print(args)
 9 # new_list1 = [11,22,33,44,55,66,77,88,99]
10 # index1(*new_list1)  # index1(11,22,33,44,55,66,77,88,99)
11 """
12 *號在實參中的使用
13     會將列表、元組內的元素打散成位置參數的形式一一傳值
14 """
15 
16 # def index2(**kwargs):
17 #     print(kwargs)
18 new_dict = {'username':'jason','pwd':123}
19 # index2(**new_dict)  # index2(username='jason',pwd=123)
20 # {'username': 'jason', 'pwd': 123}
21 """
22 **號在實參中的使用
23     會將字典內的鍵值對打散成關鍵字參數傳入
24 """

 

 

函數參數補充

1.命名關鍵字參數

 1     def register(name,age,*,sex,height):
 2         pass
 3 
 4     # register('jason',18,'male',183)
 5     register('lili',18,sex='male',height='1.8m') #正確使用
 6     """
 7     sex height在傳入實參的時候必須以關鍵字參數的形式
 8 
 9     ps:該類型的參數幾乎不用 也幾乎很少能碰到
10     """

名稱空間

1.什么是名稱空間(namespaces)

用於存放變量名與變量值綁定關系的地方(類似於民政局)

2.名稱空間的分類

內置名稱空間

python解釋器提前給你定義好的

1 print()
2 len()
3 ...

3.全局名稱空間

在py文件中頂格編寫的代碼運行之后都會存入全局名稱空間

1             name = 'jason'  # name全局
2             def func():  # func全局
3                 pass
4             if 1:
5                 a = 123  # a全局
6             for i in range(10):
7                 print(i)  # i全局
8             while True:
9                 a = 123  # a全局

4.局部名稱空間

函數體代碼運行之后產生的都是局部名稱空間

5.存活周期

 

1.內置名稱空間
python解釋器啟動與關閉而創建和銷毀
2.全局名稱空間
隨着py文件的運行與結束而創建和銷毀
3.局部名稱空間
隨着函數體代碼的執行與結束而創建和銷毀

名字的查找順

在查找名字的時候 要先確定自己當前在哪序

1.如果你在局部

局部 >>> 全局 >>> 內置

2.如果你在全局

全局 >>> 內置

3.局部名稱空間的嵌套

 1 '''函數在定義階段名字的查找順序就已經固定死了(特例)'''
 2 x = 111
 3 def f1():
 4     x = 222
 5     def f2():
 6         x = 333
 7         def f3():
 8             x = 444
 9             def f4():
10                 x = 555
11                 print(x)
12                 # x = 555  特例
13             f4()
14         f3()
15     f2()
16 # 通過調用f1 執行所有的函數
17 f1()

 

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM