函式的引數

2022-09-12 12:33:23 字數 3636 閱讀 8480

關鍵字引數:函式呼叫時,在實參前面指定形參名的方式。即決定引數是否是關鍵字引數的是實參,跟形參沒有關係。

帶有預設值的引數:定義函式時,形參給定預設值。是否為帶有預設值的引數是由形參決定的,跟實參沒有關係。此時若呼叫函式時,直接傳入實參而沒有在實參前指定形參名的話,就只是位置引數;如果呼叫函式時,實參前指定了形參名,就是關鍵字引數。

位置引數的形參可以指定預設值,關鍵字引數的形參也可以指定預設值,即是否制定預設值,跟是否是什麼型別的引數無關。

函式的引數有四種:非關鍵字引數、非關鍵字收集引數、關鍵字引數、關鍵字收集引數。非關鍵字引數和非關鍵字收集引數稱為位置引數,因為這樣的引數的位置至關重要。

引數收集:

非關鍵字收集引數(*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=

分配引數:運算子(*和**)不僅可以在定義函式的時候,作為函式的收集引數;也可以在呼叫函式的時候,作為函式的分配引數,即執行與定義函式時相反的操作。

通過*將元組中(或列表)的引數分配給函式的形參:

>>> def

add(x, y, z):

...

return x + y +z

...>>> params = (2, 5 ,7) #

引數是元組

>>> add(*params) #

引數分配

14

通過**將字典中的引數分配給函式的形參:

>>> def

hello(name, greeting):

...

print

(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 的...