1. 動態引數
位置引數的動態引數: *args
動態接收引數的時候要注意: 動態引數必須在位置引數後面
順序: 位置引數, 動態引數*, 預設值引數
例子:def chi(a, b, *food, c="娃哈哈"):
print(a, b, food, c)
chi("香蕉", "菠蘿") # 香蕉 菠蘿 () 娃哈哈 預設值⽣生效
chi("香蕉", "菠蘿", "葫蘆娃") # 香蕉 菠蘿 ('葫蘆娃',) 娃哈哈 預設值⽣生效
chi("香蕉", "菠蘿", "葫蘆娃", "口罩") # 香蕉 菠蘿 ('葫蘆娃', '口罩') 娃哈哈 預設值生效
注意: 這個時候我們發現所有的預設值都生效了. 這個時候如果不給出關鍵字傳參. 那麼你的預設值是永遠都生效的.
關鍵字引數的動態引數 : **kwargs
順序:位置 > *args>預設值 > **kwargs
如果想接收所有的引數:
def func(*args, **kwargs):
print(args, kwargs)
func("麻花藤","馬暈",wtf="胡辣湯")
動態引數的另一種傳參方式:
def fun(*args):
print(args)
lst = [1, 4, 7]
fun(lst[0], lst[1], lst[2])
fun(*lst) # 可以使用*把乙個列表按順序打散
s = "臣妾做不不到"
fun(*s) # 字串也可以打散, (可迭代物件)
在形參上*聚合, **聚合
在實參上*打散, **打散
在實參位置上給乙個序列,列表,可迭代物件前面加個*表示把這個序列按順序打散.
在形參的位置上的* 表示把接收到的引數組合成乙個元組
如果是乙個字典, 那麼也可以打散. 不過需要用兩個*
def fun(**kwargs):
print(kwargs)
dic =
fun(**dic)
函式的注釋:
def chi(food, drink):
"""這裡是函式的注釋, 先寫一下當前這個函式是幹什麼的, 比如我這個函式就是乙個吃
:param food: 引數food是什麼意思
:param drink: 引數drink是什麼意思
:return: 返回的是什麼東西
"""print(food, drink)
return "very good"
2. 命名空間和作用域
命名空間:
1. 內建命名空間: python解釋內部執行時的變數函式
2. 全域性命名空間: 我們在py檔案中直接宣告出來的變數,函式
3. 區域性命名空間: 在函式內部宣告的變數和函式.(我們直接在py檔案中, 函式外宣告的變數量都屬於全域性命名空間)
作用域:
1.全域性作用域:內建+全域性
2.區域性作用域:區域性
globals() 檢視全域性作用域中的名字
locals() 檢視當前作用域中的名字
3. global和nonlocal
global: 把全域性變數拿到區域性來用.
nonlocal: 把離他最近的一層的變數拿過來.不會找全域性
python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
python 函式的高階
函式根據有沒有引數以及有沒有返回值,可以相互組合,一共有4 種組合形式 無引數,無返回值 無引數,有返回值 有引數,無返回值 有引數,有返回值 定義函式時,是否接收引數,或者是否返回結果,是根據實際的功能需求來決定的!如果函式內部處理的資料不確定,就可以將外界的資料以引數傳遞到函式內部 如果希望乙個...