day10 python學習 函數的嵌套命名空間作用域等
阿新 • • 發佈:2017-11-02
*args class none sdas set str images 排序 com
1、三元運算
#1.三元運算 利用已下方法就可以實現一步運算返回a b中大的值 def my_max(a,b): c=0 a=int(input(‘請輸入‘)) b=int(input(‘請輸入‘)) # if a>b: # c=a # else: # c=b #或者這樣 c = a if a > b else b return c ret=my_max(1,3) print(ret)
2.補充上節差的知識點
形參:
#位置參數
#默認參數(關鍵字參數)
#動態參數
*args:接收說有按照位置傳遞的參數,接收到的是參數是組成的元祖
*kwargs:接收說有按關鍵字傳遞的參數,接收到的是參數組成的字典
這次講的是動態參數
參數的排序 如果各種參數都在函數中使用,就要以以下的形式排序
def func3(a,b,c,*args,key=‘key‘,**kwargs):
#2.動態參數 def func(a,b,c,*args,key="key"): #在參數前面加一個* 這個參數就變成了動態參數 print(a,b,c) #默認參數放在動態參數後邊 print(key) #參數print(args) set=func(1,2,3,‘sd‘,11,22,33,key=‘aaa‘)
以下是返回值 # 1 2 3 #前邊這三個必須有,少一個都不能 # aaa #返回的就是此次的正常結果 # (‘sd‘, 11, 22, 33) 使用的時候,所有傳入的值都被組織成元祖的形式
#動態參數2 **kwargs的用法 def func3(a,b,c,*args,key=‘key‘,**kwargs): print(a,b,c,) print(key) print(args) print(kwargs) set=func3(1,2,3,‘View Codesdash‘,key=‘www‘,x=3,y=‘alex‘) #這裏最後的kwargs要註意不要寫成與 以下是返回值 #前邊的形參的關鍵字參數有重復 #如不能在後寫成a="alex"會報錯 # 1 2 3 # www # (‘sdash‘,) # {‘x‘: 3, ‘y‘: ‘alex‘} #kwargs這個傳入的值都會組織成字典的形式
#4魔性用法 def func4(*args): print(args) li=[1,2,3,4,5] # func4(li) # 得到以下結果 #([1, 2, 3, 4, 5],) 直接將列表傳遞到函數的話,他會直接弄成一個大的元祖 func4(*li) #結果如下 在列表名前加一個*就是打散的意思,這樣可以一一是放在元祖中去 #(1, 2, 3, 4, 5) 也有**dic的用法
3.命名空間
三種命名空間之間的加載與取值順序:
加載順序:內置命名空間(程序運行前加載)->全局命名空間(程序運行中:從上到下加載)->局部命名空間(程序運行中:調用時才加載)
取值:
在局部調用:局部命名空間->全局命名空間->內置命名空間
4.作用域
全局作用域
局部作用域
nonlocal的用法,和他的作用
n=2 def func(): n=4 def func2(): nonlocal n #想要引用上一層的並改變他得值就得用nonlocal這個,如果只是引用不用nonlocal n n +=1 func2() print(n) #運行程序打印的是5 說明上一層的n=1在最下層被修改成功了 func()
內層函數想要改變全局變量中的n的值的話就要用global 來引入全局變量
n=2 def func(): n=4 def func2(): global n#想要引用全局變量的並改變他得值就得用這個,如果只是引用不用nonlocal n n +=1 func2() print(n) #運行程序打印的是4 說明上一層的n=4沒有被改變 func() print(n) #運行結果還是3 說明只是改變了全局變量n=2的值
函數的嵌套
輸出的結果
輸出結果是 我是qqxing
day10 python學習 函數的嵌套命名空間作用域等