python 的基礎 學習 12天,函數
1, *args 動態 參數,萬能參數
*args就是接受實參對應的剩余的位置參數,並將其放在元組中。在定義函數時,*args代表的是聚合。
def func(*args): print(args) func(1,34,‘jdai‘,5,56,66)#(1, 34, ‘jdai‘, 5, 56, 66)
def func(a,b,c,d,*args,e=‘男‘): print(a) print(b) print(c) print(d) print(args) print(e) func(1,2,3,4,5,10,5,6,7,8,e=‘女‘)#1
2
3
4
(5, 10, 5, 6, 7, 8)
女
2,**kwargs,動態傳參,只接受關鍵字參數,將所有的關鍵字參數(無意義的)放到一個字典中。
最終順序(形參角度)
def func(a,b,c,**kwargs): print(kwargs) func(1,3,4,r=6,t=7,y=0)
位置傳參,*args, 默認參數 **kwargs
def func(a,b,c,d,*args,e=‘男‘,**kwargs): print(a) print(b) print(c) print(d) print(args)#(5, 10, 5, 6, 7, 8)print(e) print(kwargs)#{‘f‘: ‘女‘, ‘h‘: 48, ‘g‘: 5} func(1,2,3,4,5,10,5,6,7,8,f=‘女‘,g=5,h=48)
3, *號的魔法運用,在函數調用執行時,*代表打散。*加可叠代對象(list,tuple,set,str,dict的鍵),代表打散,將元素一一添加到args。
def func(*args): print(args) li = [1,2,3,4,6] l2 = [3,6,6,7,77,66] tu = (‘eqwj‘,‘ee‘,‘ui‘) func(*li,*l2,*tu)
(1, 2, 3, 4, 6, 3, 6, 6, 7, 77, 66, ‘eqwj‘, ‘ee‘, ‘ui‘)將元素一一添加到args中。
def func(**kwargs): print(kwargs) dic = {‘name‘:‘alex‘,‘age‘:44} dic1 = {‘home‘:‘taiwan‘,‘hobby‘:‘football‘} func(**dic,**dic1)
**字典,代表打散,將所有鍵值對放到一個kwargs字典裏。
def func(*args,**kwargs): print(args) print(kwargs) dic1 = {‘honnn‘:‘shui‘,‘nugu‘:‘dao‘} dic2 = {‘name1‘:‘兩年半‘,‘age‘:33} func(*[1,3,4,5],*‘ahdhsdkj‘,**dic1,**dic2)
(1, 3, 4, 5, ‘a‘, ‘h‘, ‘d‘, ‘h‘, ‘s‘, ‘d‘, ‘k‘, ‘j‘)
{‘nugu‘: ‘dao‘, ‘name1‘: ‘兩年半‘, ‘honnn‘: ‘shui‘, ‘age‘: 33}
4,名稱空間,也叫命名空間。放置變量與對應的值得關系(內存地址的關系)。當執行函數的時候,它會在內存中開辟一個臨時名稱空間,存放函數體內的所有變量與值得關系,隨著函數的執行完畢,
臨時空間自動關閉。
全局名稱空間,名稱空間,命名空間,全面命名空間。
局部命名空間,臨時名稱空間,臨時命名空間,局部名稱空間。
內置名稱空間,所有的內置函數等存儲的空間。
加載順序:
內置名稱空間>>>全局名稱空間>>>(函數執行時)局部名稱空間
取值順序:
(函數執行時)局部名稱空間>>>全局名稱空間>>>內置名稱空間
name = ‘老男孩‘ def func1(): name =‘taibai‘ print(name) func1()#taibai
name = ‘老男孩‘ def func1(): # name =‘taibai‘ print(name) func1()#老男孩
全局作用域:全局名稱空間,內置名稱空間。
局部作用域:局部名稱空間。
5,函數的嵌套
print(111)#1 def func1(): print(333)#2 func2() print(777)#4 def func2(): print(444)#3 def func3(): print(555) func2() func1() print(222)#5
print(111)#1 def func1(): print(333)#2 func2() print(444)#6 def func2(): print(222)#3 func3() print(555)#5 def func3(): print(666)#4 func1() print(777)#7
6,globals和locals
a = 2 b = 3 def func1(): c = 4 d = 5 print(globals())#將全局變量放在字典中 return locals()#將局部變量放在字典中{‘c‘: 4, ‘d‘: 5} print(func1())
{‘a‘: 2, ‘__cached__‘: None, ‘__file__‘: ‘D:/python3/day11/xuxi329.py‘, ‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘b‘: 3, ‘__loader__‘: <_frozen_importlib_external.SourceFileLoader object at 0x000001EE02A95780>, ‘func1‘: <function func1 at 0x000001EE026CA048>, ‘__spec__‘: None, ‘__package__‘: None}
a = 4 def func1(): b = 6 def func2(): nonlocal b#nonlocal不能修改全局變量 b = 666 print(b) func2() print(b) func1()
global:
1,在局部空間內,聲明一個全局變量。
2,在局部空間內,改變一個全局變量。
globals,全局名稱空間:所有變量。
locals,局部名稱空間:所有變量。
nonlocal:
1,不能修改全局變量。
2,在局部作用域中,對父級作用域(或者更外層作用域非全局作用域)的變量進行引用和修改,並且引用的哪層,從那層及以下此變量全部發生改變。
python 的基礎 學習 12天,函數