1、函數動態傳參 *args : 將所有的位置參數打包成一個元組的形式. **kwargs : 將所有的關鍵字參數打包成一個字典的形式. 形參的接收順序: 位置參數 > *args > 預設值參數> **kwargs. 2、命名空間 命名空間: 在python解釋器執行後, 記憶體中開闢的一塊用於存放 ...
1、函數動態傳參
*args : 將所有的位置參數打包成一個元組的形式.
**kwargs : 將所有的關鍵字參數打包成一個字典的形式.
形參的接收順序: 位置參數 > *args > 預設值參數> **kwargs.
2、命名空間
命名空間: 在python解釋器執行後, 記憶體中開闢的一塊用於存放變數名和值對應關係的一個空間.
分類:
內置命名空間: python自己提供的一些方法, print(), int()...
全局命名空間: .py文件中, 函數外聲明的變數等...
局部命名空間: 函數或類中聲明的變數...
命名空間的載入順序: 內置命名空間 >> 全局命名空間 >> 局部命名空間
取值順序: 局部命名空間 >> 全局命名空間 >> 內置命名空間
3、作用域
全局作用域:內置命名空間 + 全局命名空間
局部作用域: 僅在函數或類內部的作用域
4、global , nonlocal
global: 聲明全局變數. 聲明不使用局部作用域中的變數, 直接用全局作用域中的變數.
1 a = 10 2 def outer(): 3 a = 100 4 def inner(): 5 global a # 不是改變inner()外部的a,而是改變全局作用域中的a(即最外邊的a) 6 a = 200 7 inner() 8 outer() 9 print(a) # 200global
nonlocal: 聲明全局內某層函數外的局部變數. 聲明在局部作用域中,調用父級命名空間中的變數.
1 a = 10 2 def outer(): 3 a = 100 4 print("nonlocal之前",a) # 100 5 def inner(): 6 nonlocal a # 僅改變inner()父級的局部作用域. 7 a = 200 8 inner() 9 print("nonlocal之後",a) # 200 10 outer() 11 print(a) # 10nonlocal
註意: nonlocal 不能聲明調用最外層(即全局作用域)的變數, 會直接報錯.
1 a = 10 2 def outer(): 3 def inner(): 4 nonlocal a # 不能找到最外層(即全局作用域)的變數 5 a = 200 6 inner() 7 outer() 8 9 10 11 # 會直接報錯 : SyntaxError: no binding for nonlocal 'a' foundnonlocal