標籤:pytho .com close 列表 pen closed glob 引用 hang
動態參數:一,*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,argsset=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,argsset=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,)
只含有**args
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) return x,y,sex,args,kwargsset=func(1,2,3,4,5,a=3,b=7)print(set)
位置參數,*args,預設參數,**kwargs
從上面的函數可以得出:
在形式參數的排序是:位置參數-->*args-->預設參數-->**kwargs
魔法運算:(將列表中的元素釋放出來,不在以列表和字典的形式。也稱:打散)
def func1(*args): return argsfunc1(*[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 = 3func()print(a)count = 1def search(): global count count = 2search()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)