1. 程式人生 > >python(動態傳參、命名空間、函數嵌套、global和nonlocal關鍵字)

python(動態傳參、命名空間、函數嵌套、global和nonlocal關鍵字)

local pri hide 為我 one pytho locals 作用 屬於

一、函數的動態傳參

  1.*args位置參數動態傳參

技術分享圖片
def chi(*food):
    print(food)
chi("燒烤","火鍋","蝦吃蝦涮","烤魚")
View Code

    多個位置參數傳遞進去,收到的內容是元組tuple,動態參數的位置必須要在位置參數後面

  2**kwargs 關鍵字參數動態傳參

技術分享圖片
def chi(**food):
    print(food)
chi(zhangqing="吃點好的",lianda="吃不辣的",徐建="方便面")
#{‘zhangqing‘: ‘吃點好的‘, ‘lianda‘: ‘吃不辣的‘, ‘徐建‘: ‘方便面‘}
#輸出結果是以字典的形式
View Code

  順序:位置參數、*args、默認值、**kwargs

  def func(*args,**kwargs): 這個樣式的函數比較強大,能滿足的需求很多。

    pass

  形參的位置*,**:聚合

  實參的位置*,**:打散

    位置參數的動態傳參:把list、tuple、set、str 進行叠代打散

    關鍵字動態傳參: 打散成字典

二、命名空間

  1.內置命名空間:存放在python解釋器為我們提供名字的如list、tuple、str等這些都是內置命名空間。

  2.全局命名空間:我們在py文件中,函數外生命的變量都屬於全局命名空間。

  3.局部命名空間:在函數中生命的變量會放在局部命名空間。

  作用域:

    1.全局作用域:內置+全局

    2.局部作用域:局部(函數被調用)

  globals() 查看全局中的內容

  locals() 查看當前作用域中的內容

三、函數嵌套

  *只要遇見了()就是函數的調用,如果沒有()就不是函數的調用。

  *函數可以互相的嵌套,無限的嵌套。

四、global和nonlocal關鍵字

  global:在局部訪問全局中的內容

技術分享圖片
a = 100 
def func():    
    global a    # 加了了個global表示不不再局部創建這個變量量了了. ?而是直    接使?用全局的a    
a = 28 print(a) func() print(a) #global表?示. 不再使?用局部作?用域中的內容了了. ?而改?用全局作?用域中的變量量
View Code

  nonlocal:在局部尋找外層函數中離他最近的那個變量,但是不會到全局中尋找。

技術分享圖片
a = 10 
def func1():    
    a = 20    
    def func2():
        nonlocal a        
        a = 30        
        print(a)    
    func2()    
    print(a)
func1() 
結果: 
加了nonlocal 
30 
30 
不不加nonlocal 
30 
20    
View Code

python(動態傳參、命名空間、函數嵌套、global和nonlocal關鍵字)