函式的進階
動態引數
*args 動態位置引數
*在形參位置叫做聚合
以位置的形式傳參 得到的是元組
**kwargs 動態預設引數
**在形參的時候是聚合
以關鍵字的形式傳參 得到的是字典
args 和 kwargs 是可以更換的,但程式設計師約定都是它
用途
在不明確接受引數的數量時,用*args 和 **kwargs
引數位置
形參 : 位置引數 > 動態位置引數(*args) > 預設引數 > 動態預設(關鍵字)引數(**kwargs)
實參 : 位置引數 > 關鍵字引數
在實參呼叫的時候,*是將可迭代的物件打散,字典是將鍵取出
在形參處出現*就是在聚合
在實參呼叫的時候,**就是將字典打散成 關鍵字引數 (鍵 = 值)
在形參出出現**就是將關鍵字引數聚合成一個字典
函式的註釋
定義完函式後寫 """ """ 即可新增註釋
檢視註釋 print(函式名.__doc__)
檢視函式名 print(函式名.__name__)
名稱空間
內建空間:內建空間中所有程式碼
全域性空間:自己寫的py檔案
區域性空間:函式中的程式碼
載入順序: 內建空間 > 全域性空間 > 區域性空間
取值(查詢)順序:區域性空間 > 全域性空間 > 內建空間 (找不到就報錯)
作用域
全域性作用域:內建+全域性 = 全域性作用域
區域性作用域:函式內的就是區域性作用域
global 和 nonlocal
global:宣告要在全域性裡修改一個變數 在區域性修改全域性變數,沒有就建立一個
nonlocal:在一個區域性空間內,nonlocal會修改離它最近的變數,如果上一層沒有,就繼續向上找,直到區域性空間頭部
函式的巢狀