python基礎(chǔ)(七)----函數(shù)與參數(shù)

一.函數(shù)的定義

函數(shù)是組織好的区岗,可重復(fù)使用的略板,功能集中單一的代碼段。
函數(shù)的定義規(guī)則:

  • 定義一個函數(shù)要使用def語句慈缔,依次寫出函數(shù)名叮称、括號、括號中的參數(shù)和冒號藐鹤。
  • 參數(shù)必須放在圓括號內(nèi)瓤檐。
  • 函數(shù)的第一行語句可以選擇性地使用文檔字符串,用于表達(dá)函數(shù)的用途和參數(shù)說明娱节。
  • 函數(shù)內(nèi)容以冒號起始挠蛉,函數(shù)體要縮進(jìn)4格。
  • return [表達(dá)式] 結(jié)束函數(shù)肄满,選擇性地返回一個值給調(diào)用方碌秸。不帶表達(dá)式的return相當(dāng)于返回 None绍移。
def 函數(shù)名( 參數(shù)):
   "函數(shù)文檔字符串"

     函數(shù)內(nèi)容

   return [表達(dá)式]

二. 函數(shù)體與返回值

  1. 函數(shù)體

函數(shù)體開始要空4格,如果想定義一個什么事也不做的空函數(shù)讥电,可以用pass語句占位蹂窖。如果不使用pass占位會報錯。

def func():
    pass
  1. 返回值
  • return可以省略恩敌。如果沒有return語句瞬测,函數(shù)執(zhí)行完畢后會返回None。
  • return None可以簡寫為return纠炮。
  • Python函數(shù)可以返回多個值:
def func():
    a=1
    b=2
    return a,b

m,n=func()

其實(shí)月趟,本質(zhì)上講Python函數(shù)并沒有返回多個值,而是返回一個tuple恢口!但是孝宗,在語法上,返回一個tuple可以省略括號耕肩,而多個變量可以同時接收一個tuple因妇,按位置賦給對應(yīng)的值,所以猿诸,Python的函數(shù)返回多值其實(shí)就是返回一個tuple婚被,但寫起來更方便。

三.參數(shù)

1.Python函數(shù)的參數(shù)種類

Python函數(shù)的參數(shù)類型一共有五種梳虽,分別是:
位置參數(shù)
默認(rèn)參數(shù)
可變參數(shù)
關(guān)鍵字參數(shù)

  1. 位置參數(shù)
    最常見的參數(shù)址芯,使用位置參數(shù)時,傳參的順序數(shù)量必須和聲明完全一致窜觉。
def p(name,age):
    print name
    print age
    return

p('yoyo',12)
  1. 默認(rèn)參數(shù)(parameter=)
    函數(shù)聲明的時候谷炸,可以給參數(shù)設(shè)置默認(rèn)值。調(diào)用時禀挫,如果不傳遞此參數(shù)旬陡,會使用默認(rèn)值,默認(rèn)參數(shù)一定要放在位置參數(shù)后面特咆。
def p(name,age=12):
    print name
    print age
    return

p('yoyo')
  1. 可變參數(shù)
    定義函數(shù)時,在參數(shù)前面加一個※录粱,表示這個參數(shù)是數(shù)量可變的腻格,調(diào)用時該參數(shù)可以接受任意多個值。可變參數(shù)允許你傳入0個或任意個參數(shù)啥繁,這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple菜职。
def calculate(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

s=calculate(1,2,3,4)

如果已經(jīng)有一個list或者tuple,要調(diào)用一個可變參數(shù)怎么辦旗闽?Python允許你在list或tuple前面加一個*號酬核,把list或tuple的元素變成可變參數(shù)傳進(jìn)去:

>>> nums = [1, 2, 3]
>>> calc(*nums)
14
  1. 關(guān)鍵字參數(shù)
    關(guān)鍵字參數(shù)允許傳入0個或任意個含參數(shù)名的參數(shù)蜜另,這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

關(guān)鍵字參數(shù)有什么用嫡意?它可以擴(kuò)展函數(shù)的功能举瑰。比如,在person函數(shù)里蔬螟,我們保證能接收到name和age這兩個參數(shù)此迅,但是,如果調(diào)用者愿意提供更多的參數(shù)旧巾,我們也能收到耸序。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外鲁猩,其他都是可選項坎怪,利用關(guān)鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。

  1. 命名關(guān)鍵字參數(shù)
    和關(guān)鍵字參數(shù)不同廓握,命名關(guān)鍵字參數(shù)需要一個特殊分隔符※搅窿,※后面的參數(shù)被視為命名關(guān)鍵字參數(shù)。
    調(diào)用方式如下:
def person(name, age, *, city, job):
    print(name, age, city, job)

>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer

命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名疾棵,這和位置參數(shù)不同戈钢。如果沒有傳入?yún)?shù)名,調(diào)用將報錯:

>>> person('Jack', 24, 'Beijing', 'Engineer')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: person() takes 2 positional arguments but 4 were give

四. 函數(shù)參數(shù)中的引用

回憶上節(jié)中是尔,我們介紹Python中所有變量都是引用殉了,那么將實(shí)參數(shù)據(jù)傳遞給形參的過程,本質(zhì)上就是讓形參指向?qū)崊⒌囊脤ο蟆?/p>

  • 函數(shù)的參數(shù)是可變類型:
    (如 列表拟枚,字典)類似 c++ 的引用傳遞薪铜。由于可變類型可以通過引用修改數(shù)據(jù),所以在函數(shù)內(nèi)部修改后恩溅,外部也會受影響隔箍。

  • 函數(shù)的參數(shù)是不可變類型:
    (如整數(shù)、字符串脚乡、元組)類似 c++ 的值傳遞蜒滩。不可變類型不能通過引用修改數(shù)據(jù),只能重新引用其他對象奶稠。所以在函數(shù)內(nèi)部修改參數(shù)的值俯艰,只會將形參指向其他對象,不會影響到函數(shù)外部锌订。

參考:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888

最后編輯于
?著作權(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
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峦甩。 大學(xué)時的朋友給我發(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)容