函數(shù)的參數(shù)

定義函數(shù)時(shí)()里的參數(shù)叫做形參(形式參數(shù)),它只是一個變量名赫段,接受調(diào)用時(shí)傳遞的實(shí)參,僅供函數(shù)體中的代碼調(diào)用矢赁。

函數(shù)調(diào)用時(shí),傳入()里的參數(shù)叫實(shí)參(實(shí)際參數(shù))贬丛,它是實(shí)際的數(shù)據(jù)撩银,會傳遞給形參。

形參

根據(jù)形參的功能和定義方式可以分為:

  • 必須參數(shù)
  • 默認(rèn)參數(shù)
  • 動態(tài)參數(shù)
    • 位置動態(tài)參數(shù)
    • 關(guān)鍵字動態(tài)參數(shù)

必須參數(shù)

在定義函數(shù)時(shí)豺憔,如果要求調(diào)用者必須傳遞實(shí)參給這個形參额获,那么這個形參就要定義為必須形參够庙。

直接定義在函數(shù)名后的()里的形參就是必須形參。

例如上一節(jié)中的my_print函數(shù)中的contentcount抄邀。我們再來看一個案例:

定義一個函數(shù)耘眨,接收兩個數(shù),然后打印它們的和

>>> def add(x,y):
...     print(x+y)
>>> add(1)      # 調(diào)用時(shí)必須傳遞實(shí)參給必須參數(shù)境肾,否則報(bào)錯
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() missing 1 required positional argument: 'y'
>>> add(1,2)
3

默認(rèn)參數(shù)

在定義函數(shù)時(shí)剔难,某些形參有默認(rèn)值,在調(diào)用時(shí)可以不接收實(shí)參奥喻,這種情況就可以定義為默認(rèn)形參偶宫。

在函數(shù)名后()中,以參數(shù)名=默認(rèn)值的形式定義的形參就是必須參數(shù)环鲤。

注意:默認(rèn)參數(shù)必須定義在必須參數(shù)的后面

案例:

定義一個函數(shù)纯趋,它接收兩個參數(shù)contentcount

content是函數(shù)要打印的內(nèi)容

count是函數(shù)打印的次數(shù),如果不傳遞count默認(rèn)打印1

>>> def my_print(content, count=1):
...     for i in range(count):
...        print(content)
# 調(diào)用
>>> my_print('好好學(xué)習(xí)冷离,天天向上吵冒!')
'好好學(xué)習(xí),天天向上西剥!'
>>> my_print('好好學(xué)習(xí)桦锄,天天向上!', 2)
'好好學(xué)習(xí)蔫耽,天天向上结耀!'
'好好學(xué)習(xí),天天向上匙铡!'

調(diào)用函數(shù)時(shí)傳遞實(shí)參給默認(rèn)形參會覆蓋默認(rèn)值图甜。

動態(tài)參數(shù)

在定義函數(shù)時(shí),不確定在調(diào)用時(shí)會傳遞多少個實(shí)參鳖眼,可以定義為動態(tài)形參黑毅。

動態(tài)形參根據(jù)實(shí)參的傳遞方式又分為兩種。

位置動態(tài)參數(shù)

在函數(shù)名后的()中钦讳,在形參前加*號矿瘦,這個形參就被定義為位置動態(tài)參數(shù),通常位置動態(tài)參數(shù)的參數(shù)名為args愿卒。

它用來接收函數(shù)調(diào)用時(shí)缚去,以位置形式傳遞過來的超過形參數(shù)量的多余的實(shí)參。

注意:位置動態(tài)參數(shù)必須定義在默認(rèn)參數(shù)后面琼开。

位置動態(tài)參數(shù)會將所有多余的位置實(shí)參創(chuàng)建成一個元組易结。

>>> def func(a, *args):
...     print(args, type(args))
>>> func(1,2,3,4)
(2, 3, 4) <class 'tuple'>

案例:

定義一個函數(shù),接受2個以上的數(shù),打印它們的和搞动。

>>> def add(x, y, *args):
...     sum = x + y
...     for i in args:
...         sum += i
...     print(sum)
>>> add(1, 2, 3, 4)
10

關(guān)鍵字動態(tài)參數(shù)

在函數(shù)名后的()中躏精,在形參前加**號,這個形參就被定義為關(guān)鍵字動態(tài)參數(shù)鹦肿,通常關(guān)鍵字動態(tài)參數(shù)的參數(shù)名為kwargs矗烛。

它用來接收函數(shù)調(diào)用時(shí),以關(guān)鍵字形式傳遞過來的超過形參數(shù)量的多余的實(shí)參箩溃。

注意:關(guān)鍵字動態(tài)參數(shù)必須定義在位置動態(tài)參數(shù)的后面瞭吃。

關(guān)鍵字動態(tài)參數(shù)會將多余的關(guān)鍵字實(shí)參創(chuàng)建成一個字典

>>> def func(a, **kwargs):
...     print(kwargs, type(kwargs))
>>> func(a=1,b=2,c=3,d=4)
{'b': 2, 'c': 3, 'd': 4} <class 'dict'>

實(shí)參

調(diào)用函數(shù)時(shí)傳遞實(shí)參有兩種方式:

  • 位置傳遞
  • 關(guān)鍵字傳遞

位置傳遞

調(diào)用函數(shù)時(shí),在小括號中以(實(shí)參1,實(shí)參2,...)的形式傳遞的實(shí)參會按照位置與形參一一對應(yīng)碾篡,以這種方式傳遞的實(shí)參叫做位置實(shí)參虱而。

案例:

定義一個函數(shù)實(shí)現(xiàn)打印一個數(shù)的n次冪。

>>> def my_power(x, n):
...     print(x**n)
>>> my_power(3,2)       # 3傳遞給x,2傳遞給n
9
>>> my_power(2,3)       # 2傳遞給x,3傳遞給n
8

關(guān)鍵字傳遞

調(diào)用函數(shù)時(shí)开泽,在小括號中以(形參1=實(shí)參1,形參2=實(shí)參2,...)的形式牡拇,顯式的指定形參與實(shí)參的對應(yīng)關(guān)系,以這種方式傳遞的實(shí)參叫做關(guān)鍵字實(shí)參穆律。

注意:關(guān)鍵字實(shí)參必須寫在位置實(shí)參的后面惠呼。

案例:

使用關(guān)鍵字的方式調(diào)用my_power函數(shù)

>>> my_power(x=3,n=2)
9
>>> my_power(n=2,x=3)
9
>>> my_power(3,n=2)
9

參數(shù)解包

當(dāng)一個函數(shù)接收多個參數(shù)時(shí),如果參數(shù)存儲在一個列表或一個字典中時(shí)峦耘,調(diào)用起來非常不方便剔蹋。看下面的案例:

>>> def func(a, *args):
...     print(args, type(args))
>>> ls = [1,2,3,4,5,6]
>>> fun(ls[0],ls[1],ls[2],ls[3],ls[4],ls[5])
1 2 (3, 4, 5, 6)
>>> def func(a, **kwargs):
...     print(kwargs, type(kwargs))
>>> dc =  {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> fun(a=dc['a'], b=dc['b'], c=dc['c'], d=dc['d'])
1 2 {'c': 3, 'd': 4}

可以看到上面的案例調(diào)用時(shí)的不便辅髓,參數(shù)解包就是為了解決這些問題的泣崩。

*解包

在傳遞實(shí)參時(shí),可以通過*對可迭代對象進(jìn)行解包洛口。

>>> func(ls[0],ls[1],ls[2],ls[3],ls[4],ls[5])
1 2 (3, 4, 5, 6)
>>> func(*ls)           # 與上面的寫法等價(jià)
1 2 (3, 4, 5, 6)

**解包

在傳遞實(shí)參時(shí)矫付,可以通過**對字典進(jìn)行解包。

>>> fun(a=dc['a'], b=dc['b'], c=dc['c'], d=dc['d'])
1 2 {'c': 3, 'd': 4}
>>> fun(**dc)           # 與上面的寫法等價(jià)
1 2 {'c': 3, 'd': 4}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末第焰,一起剝皮案震驚了整個濱河市买优,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挺举,老刑警劉巖杀赢,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異湘纵,居然都是意外死亡脂崔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門瞻佛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脱篙,“玉大人娇钱,你說我怎么就攤上這事伤柄“砝В” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵适刀,是天一觀的道長秤朗。 經(jīng)常有香客問我,道長笔喉,這世上最難降的妖魔是什么取视? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮常挚,結(jié)果婚禮上作谭,老公的妹妹穿的比我還像新娘。我一直安慰自己奄毡,他們只是感情好折欠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吼过,像睡著了一般锐秦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盗忱,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天酱床,我揣著相機(jī)與錄音,去河邊找鬼趟佃。 笑死扇谣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闲昭。 我是一名探鬼主播罐寨,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼汤纸!你這毒婦竟也來了衩茸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤贮泞,失蹤者是張志新(化名)和其女友劉穎楞慈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啃擦,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡囊蓝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了令蛉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聚霜。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡狡恬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝎宇,到底是詐尸還是另有隱情弟劲,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布姥芥,位于F島的核電站兔乞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凉唐。R本人自食惡果不足惜庸追,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望台囱。 院中可真熱鬧淡溯,春花似錦、人聲如沸簿训。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煎楣。三九已至豺总,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間择懂,已是汗流浹背喻喳。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留困曙,地道東北人表伦。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像慷丽,于是被迫代替她去往敵國和親蹦哼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容