python之函數的進階(2-1)
動態參數:
一,*args:args是元祖,它包含了所有的位置參數。
1,第一種形參中只含*args。
def func(*args): print(*args,type(args)) func(1,2,3,4,5)形參中只含*args
2,第二種形參中既有位置參數又有*args。
def func(x,y,z,*args): print(x) print(y) print(z) print(args) return x,y,z,args set=func(1,2,3,4,5,6) print(set)既有位置參數又有*args
3,第三種形參中既有位置參數,*args又有默認參數。
def func(x,y,*args,sex=‘男‘): print(x) print(y) print(sex) print(args) return x,y,sex,args set=func(1,2,3,4,5,6) print(set)同時含有位置參數,默認參數,*args
**kwargs它包含了所有的關鍵字參數:
1,第一種形參中只含*kwargs。
def func(**kwargs): print(kwargs,type(kwargs)) func(a=1,b=2,c=3,)
2,第二種形參中既有位置參數又有*kwargs。
def func(x,y,**kwargs): print(x) print(y) print(kwargs) set=func(1,2,a=1,b=2,c=3,) print(set)位置參數和**kwargs
3,第三種形參中既有位置參數,*args,默認參數又有**kwargs。
def func(x,y,*args,sex=‘男‘,**kwargs): print(x) print(y) print(sex) print(args)位置參數,*args,默認參數,**kwargsreturn x,y,sex,args,kwargs set=func(1,2,3,4,5,a=3,b=7) print(set)
從上面的函數可以得出:
在形式參數的排序是:位置參數-->*args-->默認參數-->**kwargs
魔法運算:(將列表中的元素釋放出來,不在以列表和字典的形式。也稱:打散)
def func1(*args): return args func1(*[1,2,3,4,5]) print(func1(*[1,2,3,4,5]))魔法運算,列表
def func2(**kwargs): print(kwargs) dic={‘k4‘:1,‘k5‘:2,‘k6‘:2} dic1={‘k1‘:1,‘k2‘:2,‘k3‘:2} ss=func2(**dic,**dic1) print(ss)魔法運算,字典
函數的進階:
命名空間:分為全局命名空間,局部命名空間,內置命名空間。
代碼在運行伊始,創建的存儲“變量名與值的關系”的空間叫做全局命名空間
在函數的運行中開辟的臨時的空間叫做局部命名空間
存放python解釋器為我們提供的名字的空間叫做內置命名空間
加載順序:內置命名空間(程序運行前加載)->全局命名空間(程序運行中:從上到下加載)->局部命名空間(程序運行中:調用時才加載)
取值順序:
在局部調用:局部命名空間->全局命名空間->內置命名空間
在全局調用:全局命名空間->內置命名空間
綜上所述,在找尋變量時,從小範圍,一層一層到大範圍去找尋。
作用域:
作用域就是作用範圍,按照生效範圍可以分為全局作用域和局部作用域。
全局作用域:包含內置名稱空間、全局名稱空間,在整個文件的任意位置都能被引用、全局有效
局部作用域:局部名稱空間,只能在局部範圍內生效
global關鍵字,nonlocal關鍵字:
global的作用:
1:申明一個全局變量
2:在局部作用域想要對全局作用域的全局變量進行修改時,需要用到 global(限於字符串,數字)
def func(): global a a = 3 func() print(a) count = 1 def search(): global count count = 2 search() print(count)global:
註意: ps:對可變數據類型(list,dict,set)可以直接引用不用通過global
li = [1,2,3] dic = {‘a‘:‘b‘} def change(): li.append(‘a‘) dic[‘q‘] = ‘g‘ print(dic) print(li) change() print(li) print(dic)對於可變數據類型,可以不用golobal
nonlocal的作用:
1,不能修改全局變量。
2,在局部作用域中,對父級作用域(或者更外層作用域非全局作用域)的變量進行引用和修改,並且引用的哪層,從那層及以下此變量全部發生
def add_b(): b = 42 def do_global(): b = 10 print(b) def dd_nonlocal(): nonlocal b b = b + 20 print(b) dd_nonlocal() print(b) do_global() print(b) add_b()nonlocal
函數的嵌套與作用域:
python之函數的進階(2-1)