day 0314函数的进阶
1.空間:內置空間,全局空間,局部空間。
內置空間:空間存放python解釋器,為我們提供了方便的名字:input,print,str,list,tuple
三個空間的加載順序:
內置空間》》全局空間》》局部空間
三個空間的取值順序:
局部調用:局部空間》》全局空間》》內置空間
全局調用:全局空間》》內置空間
作用域:
全局作用域:包含內置空間,全局空間,在整個文件的任意位置都能被引用,全局有效。
局部作用域:局部空間內有效。
2.函數參數--動態參數
2.1動態接收位置參數:
在參數位置用*表示接受任意參數
*表示一種聚合。
def fun(*args): print('張學友的歌曲:',args) #收到的結果是一個元祖。( ,) fun('李蘭香','餓狼傳說','心如刀割','我等到花兒也謝了') 結果; 張學友的歌曲: ('李蘭香', '餓狼傳說', '心如刀割', '我等到花兒也謝了')2.1.1.注意:動態接收參數時--動態參數必須在位置參數的后面。
def fun(*args,a,b): #動態參數在位置參數前面,聚合后位置參數世界收不到數據 print(args,a,b) fun(1,2,3,4,55) TypeError: fun() missing 2 required keyword-only arguments: 'a' and 'b'正確的輸入是? 動態參數在位置參數的后面:
def fun(a,b,*args): #動態參數在位置參數后面。 print(args,a,b) fun(1,2,3,4,55) 結果: (3, 4, 55) 1 2 #args以元組的形式輸出,a=1,b=22.1.2 帶有默認值的參數的位置問題:
? ?默認值寫在動態參數前面,默認值不生效
# 默認值寫在動態參數前面,結果不生效 def fun(a,b,c='All falls down',*args): print(a,b,c,args) fun(1,2,3,4,5,6,'ada lace') 結果: 1 2 3 (4, 5, 6, 'ada lace') #實際上默認值All falls down沒有打印出來
? ?默認值寫在動態參數后面,默認值生效
# 默認值在位置參數后面,結果生效 def fun(a,b,*args,c='All falls down'): print(a,b,c,args) fun(1,2,3,4,5,6,'ada lace') 結果: 1 2 All falls down (3, 4, 5, 6, 'ada lace')注意:形參的順序:位置參數》》動態參數》》默認參數
*args? **kwargs 程序員約定習慣
3.動態接收關鍵字參數
*無法接收關鍵字參數。
#動態關鍵字接收參數最后會生成一個字典形式 def fun(**kwargs): print(kwargs) fun(a=11,b=[1,True],c='ad',d={1,2}) 結果: {'a': 11, 'b': [1, True], 'c': 'ad', 'd': {1, 2}}順序:位置參數》》*args(動態位置參數)》》默認值參數》》**kwargs
def fun(*args,**kwargs): print(args,kwargs) fun(1,['ada lace',123],'lace',{"k1":1},a='TROUBLE',b=123,c=[11,22,3]) 結果: (1, ['ada lace', 123], 'lace', {'k1': 1}) {'a': 'TROUBLE', 'b': 123, 'c': [11, 22, 3]}例如:
def fun(a,b,*args,c='JOKER',**kwargs): print(args,kwargs) fun(1,2,['ada lace',123],'lace',{"k1":1},d='TROUBLE',e=123,f=[11,22,3]) 結果: (['ada lace', 123], 'lace', {'k1': 1}) {'d': 'TROUBLE', 'e': 123, 'f': [11, 22, 3]}4.函數的注釋:
函數注釋用"""? ? """
在外部查看函數的注釋 函數名.? ? _doc_
5.global,? nonlocal
global 表示不再使用局部作用域的內容,而改用全局作用域
global只限定于字符串和數字。
注:對于可變的數據類型(list,dict,set),可以直接引用,不用通過global。
a=100 def fun(): global aprint(a) fun() print(a)可變的數據類型:
li=[11,22,33] def fun(): li.append('Tro')print(li) fun() 結果: [11, 22, 33, 'Tro']nonlocal:
1,不能修改全局變量。
2,在局部作用域中,對父級作用域(或者更外層作用域非全局作用域)的變量進行引用和修改,并且引用的哪層,從那層及以下此變量全部發生改變。
a=10 def fun(): a=20 def fun1(): nonlocal a a=83 print(a) fun1() print(a) fun() 結果: 83 83 a=10 def fun(): a=20 def fun1(): a=83 print(a)fun1() print(a) fun() 結果: 83 20
?
轉載于:https://www.cnblogs.com/Zhao159461/p/10532955.html
總結
以上是生活随笔為你收集整理的day 0314函数的进阶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows平台 python生成 p
- 下一篇: springcloud(一)-初识