關鍵字引數:函式呼叫時,在實參前面指定形參名的方式。即決定引數是否是關鍵字引數的是實參,跟形參沒有關係。
帶有預設值的引數:定義函式時,形參給定預設值。是否為帶有預設值的引數是由形參決定的,跟實參沒有關係。此時若呼叫函式時,直接傳入實參而沒有在實參前指定形參名的話,就只是位置引數;如果呼叫函式時,實參前指定了形參名,就是關鍵字引數。
位置引數的形參可以指定預設值,關鍵字引數的形參也可以指定預設值,即是否制定預設值,跟是否是什麼型別的引數無關。
函式的引數有四種:非關鍵字引數、非關鍵字收集引數、關鍵字引數、關鍵字收集引數。非關鍵字引數和非關鍵字收集引數稱為位置引數,因為這樣的引數的位置至關重要。
引數收集:
非關鍵字收集引數(*args):當非關鍵字引數的個數不確定時,其他的引數可以通過*args以元組的形式由args收集起來。
>>> def func(x, *args):...
print('
x=%s
'%x)
...
print('
args={}
'.format(args)) #
多餘的引數*args以元組的形式由args收集起來
...>>> func(1, 2, 3, 4, 5, 6, 7)
x=1args=(2, 3, 4, 5, 6, 7) #
值2, 3, 4, 5, 6, 7被塞入乙個元組裡傳給了args
即使只有乙個值,也要用元組收集它。
>>> def func(x, *args):...
print('
x=%s
'%x)
...
print('
args={}
'.format(args))
...>>> func(1, 2)
x=1args=(2,) #
只有乙個值,也要用元組收集
不給*args傳值也是允許的,這時args收集到的是乙個空元組。
>>> def func(x, *args):...
print('
x=%s
'%x)
...
print('
args={}
'.format(args))
...>>> func(1)
x=1args=() #
args收集到的是乙個空元組
關鍵字收集引數(**kwargs):當關鍵字引數的個數不確定時,其他的引數可以通過**kwargs以字典的形式由kwargs收集起來。
>>> def func(**kwargs):...
print('
kwargs={}
'.format(kwargs))
...>>> func(a=1, b=2, c=3) #
必須傳入關鍵字引數
kwargs= #
以字典的形式收集起來
用**kwargs的形式收集引數,會得到字典型別的資料,必須在傳值的時候說明「鍵」和「值」,即傳入關鍵字引數。
混合傳參:四種引數傳入的方式組合起來。但是,必須按照固定的順序——所有的位置引數要在所有的關鍵字引數前面;帶預設值的形參在不帶預設值的形參後面;同為位置引數時,收集引數要放在最後面;同位關鍵字引數時,收集引數放最後面。即不帶預設值的非關鍵字引數、帶預設值的非關鍵字引數、非關鍵字收集引數、關鍵字引數、關鍵字收集引數。
>>> def func(x, *args, y=2, **kwargs):...
print('
x=%s
'%x)
...
print('
args={}
'.format(args))
...
print('
y=%s
'%y)
...
print('
kwargs={}
'.format(kwargs))
...>>> func(33, 66, 77, y=99, lang='
python
') #
混合傳參必須按照固定的順序
x=33args=(66, 77)
y=99kwargs=
分配引數:運算子(*和**)不僅可以在定義函式的時候,作為函式的收集引數;也可以在呼叫函式的時候,作為函式的分配引數,即執行與定義函式時相反的操作。
通過*將元組中(或列表)的引數分配給函式的形參:
>>> defadd(x, y, z):
...
return x + y +z
...>>> params = (2, 5 ,7) #
引數是元組
>>> add(*params) #
引數分配
14
通過**將字典中的引數分配給函式的形參:
>>> defhello(name, greeting):
...
(greeting, name)
...>>> params = #
引數是字典
>>> hello(**params) #
分配引數
hello jack
函式的文件:包含函式的作用;函式的引數介紹(引數的個數和資料型別);函式的返回值(資料和型別)。
函式返回(結束):函式呼叫結束後將返回到被呼叫處。然後繼續向下執行。
題目:編寫乙個模仿range()的函式。
>>> def interval(start, stop=none, step=1):...
'imitates range() for step > 0
'...
if stop is
none:
... start, stop =0, start
... result =
... i =start
...
while i ... i +=step
...
return
result
...>>> interval(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> interval(1, 10, 2)
[1, 3, 5, 7, 9]
函式的引數
參考 先說一下預設引數 當我們呼叫乙個函式的時候,忘記傳入相應的引數了,那麼函式肯定呼叫失敗。為了讓函式可以在 失誤 的情況下也可以呼叫出來,那麼預設引數就可以派上用場了。例如,計算x2 可以完全把第二個引數值設為預設引數。def power x,n 2 s 1 while n 0 n n 1 s ...
函式的引數
沒有引數 定義函式和呼叫函式時括號裡都不寫內容 2.有乙個引數 傳什麼就是什麼 3.有多個引數 站在實參的角度上 按位置傳參 按關鍵字傳參 混著用可以 但是必須先按照位置傳參,再按照關鍵字傳參。不能給同乙個變數傳多個值。站在形參的角度上 位置引數 必須傳,且有幾個引數就傳幾個值 預設引數 可以不傳,...
函式的引數
現在,我們已經把函式返回值相關的事情研究清楚了,我們自己已經完成了乙個可以返回字串長度的函式。但是現在這個函式還是不完美,之前我們使用len函式的時候得是length len hello world 這樣我可以想計算誰就計算誰的長度。但是現在我們寫的這個函式,只能計算乙個 hello world 的...