函數參數的兩個類型
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 """
按照從左往右的順序依次填入的參數
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 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 """
按照從左往右的順序依次填入的參數
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 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()
------------恢復內容結束------------