可变长参数,函数的嵌套,名称空间,关键字
5.30自我總結
一.可變長參數
1.可變長形參之(*)
形參中的會將溢出的位置實參全部接收,然后存儲元組的形式,然后把元組賦值給后的參數。需要注意的是:*后的參數名約定俗成為args。
def sum_self(*args):res = 0for num in args:res += numreturn resres = sum_self(1, 2, 3, 4) print(res) #102.可變長實參之(*)
實參中的,會將后參數的值循環取出,打散成位置實參。以后但凡碰到實參中帶的,它就是位置實參,應該馬上打散成位置實參去看。
def func(x, y, z, *args):print(x, y, z, args)func(1, *(1, 2), 3, 4) #1 1 2 (3,4)3.可變長形參之(**)
形參中的會將溢出的關鍵字實參全部接收,然后存儲字典的形式,然后把字典賦值給后的參數。需要注意的是:**后的參數名約定俗成為kwargs。
def func(**kwargw):print(kwargw)func(a=5) #{'a': 5}4.可變長實參之(**)
實參中的,會將后參數的值循環取出,打散成關鍵字實參。以后但凡碰到實參中帶的,它就是關鍵字實參,應該馬上打散成關鍵字實參去看。
def func(x, y, z, **kwargs):print(x, y, z, kwargs) func(1, 3, 4, **{'a': 1, 'b': 2}) #1 3 4 {'a': 1, 'b': 2}5.可變長參數應用
def index(name, age, sex):print(f"name: {name}, age: {age}, sex: {sex}")def wrapper(*args, **kwargs):print(f"args: {args}")print(f"kwargs: {kwargs}")index(*args, **kwargs)wrapper(name='nick', sex='male', age=19)''' args: () kwargs: {'name': 'nick', 'sex': 'male', 'age': 19} name: nick, age: 19, sex: male '''二.關于函數的嵌套
最好返回值為函數名,不要是函數調用
如
#第一種 def f1():def f2():print('asdad')return f2 f2 = f1() f2() #第二種 def f1():def f2():print('asdad')return f2() f1()#最好用第一種方法運行,第二種運行可能會造成一些不必要的麻煩函數內部的函數只能在函數內部調用,不能在函數外部調用
如
def f1():def f2():print('asdad')f2() 會報錯 ,f2沒有定義三.名稱空間
1.內置名稱空間
名稱空間(name spaces):在內存管理那一章節時,我們曾說到變量的創建其實就是在內存中開辟了一個新的空間。但是我們一直在回避變量名的存儲,其實在內存中有一塊內存存儲變量名與變量間的綁定關系的空間,而這個空間稱為名稱空間。
生命周期:在python啟動時候,python關閉時候
2.全局名稱空間
全局名稱空間:除了內置和局部的名字之外,其余都存放在全局名稱空間.
生命周期:在文件執行時生效,在文件執行結束后失效
3.局部名稱空間
局部名稱空間:用于存放函數調用期間函數體產生的名字.`
生命周期:在文件執行時函數調用期間時生效,在函數執行結束后失效
如:
x = 1 # 其中X,f1為全局名稱空間,print為內置名稱空間,f2為局部名稱空間print(x) def f1():def f2():print('from f2')f2()f1()關于三種名稱空間的加載順序:
內置名稱空間→全局名稱空間→局部名稱空間
名稱空間的查找順序
如
x=1 def f1():def f2():x = 3 print(x)f2() x=3 f1() print(x)關于查找:
如果查找的起點在局部名稱空間內,他會先在局部空間他的位置開始自之下而上開始尋找,如果在局部空間內找不到,再去全局名稱空間開始尋找如果還沒找打他會去去內置名稱空間尋找他不會去另外的局部空間進行查找
如果起點在全局名稱空間,他不會去局部空間開始查找,他會去全局開始尋找,如果全局沒找到他會去內置名稱空間尋找.
四.關鍵字
1..global關鍵字
修改全局作用域中的變量。
x = 1def f1():x = 2def f2():global x # 修改全局x = 3f2()f1() print(x) #32.nonlocal關鍵字
修改局部作用域中的變量。
x = 1def f1():x = 2def f2():nonlocal xx = 3f2()print(x)f1()3.注意點
1,兩個關鍵字必寫在須在局部名稱空間變量名第一次出現的上面 2.在局部想要修改全局的可變類型,不需要任何聲明,可以直接修改。 3.在局部如果想要修改全局的不可變類型,需要借助global聲明,聲明為全局的變量,即可直接修改。轉載于:https://www.cnblogs.com/pythonywy/p/10952493.html
總結
以上是生活随笔為你收集整理的可变长参数,函数的嵌套,名称空间,关键字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谱尼医学幽门螺旋杆菌快速检测 三步直达
- 下一篇: 算法还是算力?一篇微博引爆深度学习的“鸡