函式引數:必選引數、預設引數、可選引數、關鍵字引數
1.預設引數
預設引數可以簡化函式的呼叫。設定預設引數時,有幾點要注意:
一是必選引數在前,預設引數在後,否則python的直譯器會報錯;
二是如何設定預設引數。當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數。使用預設引數最大的好處是能降低呼叫函式的難度。
def
power
(x, n=
2):
s =
1
while n >
0:
n = n -
1
s = s * x
return s
2.可選引數
可變引數傳入的引數個數是可變的,可以是1個、2個到任意個,還可以是0個
在引數前面加上*就是可變引數。在函式內部,引數numbers接收得到的是乙個tuple,呼叫該函式時,可以傳入任意個引數,包括0個引數。定義可變引數和定義list或tuple引數相比,僅僅在引數前面加了乙個*
號。在函式內部,引數numbers
接收到的是乙個tuple,因此,函式**完全不變。但是,呼叫該函式時,可以傳入任意個引數,包括0個引數:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 2)
5>>> calc()
0
>>> nums = [1,2,3]
>>> calc(*nums)
14
3.關鍵字引數
允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝成乙個dict,使用**表示關鍵字引數。
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
函式person
除了必選引數name
和age
外,還接受關鍵字引數kw
。在呼叫該函式時,可以只傳入必選引數:
>>> person('michael', 30)
name: michael age: 30 other: {}
也可以傳入任意個數的關鍵字引數:
>>> person('bob', 35, city='beijing')
name: bob age: 35 other:
>>> person('adam', 45, gender='m', job='engineer')
name: adam age: 45 other:
關鍵字引數有什麼用?它可以擴充套件函式的功能。比如,在person
函式裡,我們保證能接收到name
和age
這兩個引數,但是,如果呼叫者願意提供更多的引數,我們也能收到。試想你正在做乙個使用者註冊的功能,除了使用者名稱和年齡是必填項外,其他都是可選項,利用關鍵字引數來定義這個函式就能滿足註冊的需求。
和可變引數類似,也可以先組裝出乙個dict,然後,把該dict轉換為關鍵字引數傳進去:
>>> kw =
>>> person('jack', 24, city=kw['city'], job=kw['job'])
name: jack age: 24 other:
當然,上面複雜的呼叫可以用簡化的寫法:
>>> kw =
>>> person('jack',24, **kw)
name: jack age:
24 other:
4.
引數組合
引數定義的順序:必選引數、預設引數、可變引數和關鍵字引數
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
在函式呼叫的時候,python直譯器自動按照引數位置和引數名把對應的引數傳進去。
>>> func(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> func(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> func(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw =
>>> args = (1, 2, 3, 4)
>>> kw =
>>> func(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw =
總結:
預設引數一定要用不可變物件,如果是可變物件,執行會有邏輯錯誤!
*args
是可變引數,args接收的是乙個tuple;
**kw
是關鍵字引數,kw接收的是乙個dict。
可變引數既可以直接傳入:func(1, 2, 3)
,又可以先組裝list或tuple,再通過*args
傳入:func(*(1, 2, 3))
;
關鍵字引數既可以直接傳入:func(a=1, b=2)
,又可以先組裝dict,再通過**kw
傳入:func(**)
。
python的引數函式 關於python 函式引數
函式引數 必選引數 預設引數 可選引數 關鍵字引數 1.預設引數 預設引數可以簡化函式的呼叫。設定預設引數時,有幾點要注意 一是必選引數在前,預設引數在後,否則python的直譯器會報錯 二是如何設定預設引數。當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引...
python引數函式 Python函式引數總結
coding utf 8 整理一下python函式的各種引數型別 位置引數 呼叫函式時,傳入的兩個值按照位置順序依次賦給引數 def power x,n s 1 while n 0 n n 1 s s x return s print power 5,2 預設引數 簡化函式的呼叫 def power...
python 引數 Python函式 引數
python中將函式作為引數,區分將引數直接寫成函式名和函式名 的區別。def fun1 fun print print print fun 執行fun1 fun4 時,fun為函式fun3的返回值x print type fun type fun type fun fun 執行fun1 fun4 ...