1. 動態傳參 *, ** : 形參: 聚合 位置參數* -> 元組 關鍵字** -> 字典 實參: 打散 列表, 字元串, 元素 -> * 字典 -> ** 形參順序: 位置, *args, 預設值, **kwargs "無敵傳參" def func(*args, **kwargs): argum ...
1. 動態傳參
*, ** :
形參: 聚合
位置參數* -> 元組
def func(*args, a, b, c): print(a, b , c, args) func(1,2,3,4,5,6,7, a=8, b=9,c=10)
關鍵字** -> 字典
def func(**kwargs): print(kwargs) func(a=1, b=2, c=3, haha="呵呵", good="not bad")
實參: 打散
列表, 字元串, 元素 -> *
字典 -> **
形參順序:
位置, *args, 預設值, **kwargs
"無敵傳參"
def func(*args, **kwargs): arguments參數 keyword-arguments關鍵字參數
pass
def hash(*args, **kwargs): pass def id(*args, **kwargs): pass def input(*args, **kwargs): pass
這幾個函數都是這種"無敵傳參"的模式
2. 作用域和名稱空間
名稱空間: 用來存放名字(變數, 函數名, 類名, 引入的模塊名)的
1. 全局名稱空間: 我們在py文件中自己寫的變數, 函數.....
2. 內置名稱空間: 我們python解釋器提供好的一些內置內容(print, input....)
3. 局部名稱空間: 在我們執行函數的時候.會產生一個局部名稱空間. 放的是: 函數內部的內容(變數, 函數,類...)
名稱空間可能會有無數個, 局部名稱空間而言. 相對是獨立的.一般互不幹擾
作用域:
1. 全局作用域: 內置+全局
2. 局部作用域: 局部
globals() 查看全局作用
locals() 查看當前作用域
def num(): a = 20 b = 30 print(locals()) # 查看當前作用域中的內容 print(globals()) # 查看全局作用域中的內容 num()
3. 函數的嵌套
在函數中聲明函數
在內部函數中使用變數的時候, 查找順序: 先找自己 -> 上一層 -> 上一層..全局 -> 內置
def func1(): print("1") def func2(): print("2") def func3(): print("3") print("4") func3() print(5) print("6") func2() print("7") func1() # 1 6 2 4 3 5 7
4. nonlocal和global關鍵字
global: 在局部引入全局變數
nonlocal: 在局部...內層函數引入外層離他最近的那個變數.
只舉一個全局變數的例子
flag = False def login(): global flag # 全局變數的調用 uname = input("用戶名:") upwd = input("密碼:") if uname == "alex" and upwd == "123": flag = True else: flag = False