python中可變函數(shù)怎么定義?
如果我們想要在調(diào)用函數(shù)時(shí),少輸入一些變量。我們可以在定義函數(shù)值,輸入一些默認(rèn)的參數(shù)值:
def add(a, b = 2, c = 3):
return a + b + c
print(add(2))
output: 7
1
2
3
4
1
2
3
4
add函數(shù)有3個(gè)變量,那么我們?cè)诙x它的時(shí)候,后倆個(gè)變量被我們賦予了默認(rèn)參數(shù)值分別是2和3。若沒有在調(diào)用時(shí),明確給出后倆個(gè)變量的參數(shù)值,那么python會(huì)自動(dòng)調(diào)用默認(rèn)參數(shù)值。
合法調(diào)用方式:
add(2),add(2,3),add(2,4,5)
非法定義方式:
def add(a,b = 2, c):
return a + b + c
1
2
3
4
5
1
2
3
4
5
但是要注意,當(dāng)你定義了第一個(gè)變量的默認(rèn)參數(shù)值后,那么后面的變量必須全部都帶有默認(rèn)參數(shù)值。
參數(shù)量可變的函數(shù)定義
在python中有一個(gè)? *?運(yùn)算符,來實(shí)現(xiàn)可變參數(shù)的函數(shù)定義。
*的用法,列表的解包:
arg = [2,4]
for i in range(*arg):
print(i)
字典的解包,直接為函數(shù)提供關(guān)鍵字以及參數(shù):
d = {'a':1,'b':2,'c':3}
def add(a,b,c):
return a + b + c
print(add(**d))
output:6
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
當(dāng)存在一個(gè)形式為 **name 的最后一個(gè)形參時(shí),它會(huì)接收一個(gè)字典,其中包含除了與已有形參相對(duì)應(yīng)的關(guān)鍵字參數(shù)以外的所有關(guān)鍵字參數(shù)。 這可以與一個(gè)形式為 *name,接收一個(gè)包含除了與已有形參列表以外的位置參數(shù)的 元組 的形參組合使用 (*name 必須出現(xiàn)在 **name 之前。) 例如,如果我們這樣定義一個(gè)函數(shù):
def cheeseshop(kind, *arguments, **keywords):
print("-- Do you have any", kind, "?")
print("-- I'm sorry, we're all out of", kind)
for arg in arguments:
print(arg)
print("-" * 40)
for kw in keywords:
print(kw, ":", keywords[kw])
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
我們可以這樣去調(diào)用它:
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch")
1
2
3
4
5
1
2
3
4