Python進階04 函式的引數傳遞
阿新 • • 發佈:2018-12-05
def func(a, b, c): return a + b + c # 位置傳遞 print(func(1, 2, 3)) # 關鍵字傳遞 print(func(c=3, b=2, a=1)) # 關鍵字傳遞可以和位置傳遞混用 print(func(1, c=3, b=2)) # 引數預設值 def f(a, b, c=10): return a + b + c print(f(3, 2)) # 我們並沒有足夠的值,c沒有被賦值,c將使用預設值10 print(f(3, 2, 1)) # c被賦值為1,不再使用預設值 ''' 包裹傳遞 在定義函式時,我們有時候並不知道呼叫的時候會傳遞多少個引數。這時候,包裹(packing)位置引數,或者包裹關鍵字引數,來進行引數傳遞,會非常有用。''' def func(*name): print(type(name)) print(name) func(1, 4, 6) func(5, 6, 7, 1, 2, 3) # 包裹關鍵字傳遞 def func(**dict): print(type(dict)) print(dict) func(a=1, b=9) func(m=2, n=1, c=11) '''dict是一個字典,收集所有的關鍵字,傳遞給函式func。為了提醒Python,引數dict是包裹關鍵字傳遞所用的字典,在dict前加**。 包裹傳遞的關鍵在於定義函式時,在相應元組或字典前加*或**。''' # 解包裹 *和**,也可以在呼叫的時候使用,即解包裹(unpacking) def func_un_package(a, b, c): print(a, b, c) args = (1, 3, 4) func_un_package(*args) '''所謂的解包裹,就是在傳遞tuple時,讓tuple的每一個元素對應一個位置引數。 在呼叫func時使用*,是為了提醒Python:我想要把args拆成分散的三個元素,分別傳遞給a,b,c。''' # 相應的,也存在對詞典的解包裹,使用相同的func_un_package定義 dict = {'a': 1, 'b': 2, 'c': 3} func_un_package(**dict) # 在傳遞詞典dict時,讓詞典的每個鍵值對作為一個關鍵字傳遞給func。 '''混合: 在定義或者呼叫引數時,引數的幾種傳遞方式可以混合。但在過程中要小心前後順序。 基本原則是,先位置,再關鍵字,再包裹位置,再包裹關鍵字,並且根據上面所說的原理細細分辨。'''