Python 函數(shù)

函數(shù)是組織好的,可重復(fù)使用的谴垫,用來(lái)實(shí)現(xiàn)單一旁舰,或相關(guān)聯(lián)功能的代碼段。
函數(shù)能提高應(yīng)用的模塊性钠绍,和代碼的重復(fù)利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù)花沉,比如print()柳爽。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)碱屁。


定義一個(gè)函數(shù)

你可以定義一個(gè)由自己想要功能的函數(shù)磷脯,以下是簡(jiǎn)單的規(guī)則:

  • 函數(shù)代碼塊以 def 關(guān)鍵詞開(kāi)頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()娩脾。
  • 任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間赵誓。圓括號(hào)之間可以用于定義參數(shù)。
  • 函數(shù)的第一行語(yǔ)句可以選擇性地使用文檔字符串—用于存放函數(shù)說(shuō)明。
  • 函數(shù)內(nèi)容以冒號(hào)起始俩功,并且縮進(jìn)幻枉。
  • return [表達(dá)式] 結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方诡蜓。不帶表達(dá)式的return相當(dāng)于返回 None熬甫。

語(yǔ)法

def functionname( parameters ):
   "函數(shù)_文檔字符串"
   function_suite
   return [expression]

默認(rèn)情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的順序匹配起來(lái)的蔓罚。

實(shí)例

以下為一個(gè)簡(jiǎn)單的Python函數(shù)椿肩,它將一個(gè)字符串作為傳入?yún)?shù),再打印到標(biāo)準(zhǔn)顯示設(shè)備上豺谈。

def printme( str ):
   "打印傳入的字符串到標(biāo)準(zhǔn)顯示設(shè)備上"
   print str
   return

函數(shù)調(diào)用

定義一個(gè)函數(shù)只給了函數(shù)一個(gè)名稱郑象,指定了函數(shù)里包含的參數(shù),和代碼塊結(jié)構(gòu)茬末。這個(gè)函數(shù)的基本結(jié)構(gòu)完成以后厂榛,你可以通過(guò)另一個(gè)函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行丽惭。如下實(shí)例調(diào)用了printme()函數(shù):

# 定義函數(shù)
def printme( str ):
   "打印任何傳入的字符串"
   print str;
   return;
 
# 調(diào)用函數(shù)
printme("我要調(diào)用用戶自定義函數(shù)!");
printme("再次調(diào)用同一函數(shù)");

輸出結(jié)果如下:

我要調(diào)用用戶自定義函數(shù)噪沙!
再次調(diào)用同一函數(shù)

參數(shù)傳遞

在 python 中,類型屬于對(duì)象,變量是沒(méi)有類型的:

a=[1,2,3]

a="Runoob"

以上代碼中,[1,2,3] 是 List 類型吐根,"Runoob" 是 String 類型正歼,而變量 a 是沒(méi)有類型,她僅僅是一個(gè)對(duì)象的引用(一個(gè)指針)拷橘,可以是 List 類型對(duì)象局义,也可以指向 String 類型對(duì)象。


匿名函數(shù)

python 使用 lambda 來(lái)創(chuàng)建匿名函數(shù)冗疮。

  • lambda只是一個(gè)表達(dá)式萄唇,函數(shù)體比def簡(jiǎn)單很多。
  • lambda的主體是一個(gè)表達(dá)式术幔,而不是一個(gè)代碼塊另萤。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
  • lambda函數(shù)擁有自己的命名空間诅挑,且不能訪問(wèn)自有參數(shù)列表之外或全局命名空間里的參數(shù)四敞。
  • 雖然lambda函數(shù)看起來(lái)只能寫(xiě)一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù)拔妥,后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率忿危。

語(yǔ)法

lambda函數(shù)的語(yǔ)法只包含一個(gè)語(yǔ)句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

如下實(shí)例:

# 可寫(xiě)函數(shù)說(shuō)明
sum = lambda arg1, arg2: arg1 + arg2;
 
# 調(diào)用sum函數(shù)
print "相加后的值為 : ", sum( 10, 20 )
print "相加后的值為 : ", sum( 20, 20 )

輸出結(jié)果如下:

相加后的值為:30
相加后的值為:40

return 語(yǔ)句

return語(yǔ)句[表達(dá)式]退出函數(shù)没龙,選擇性地向調(diào)用方返回一個(gè)表達(dá)式铺厨。不帶參數(shù)值的return語(yǔ)句返回None缎玫。之前的例子都沒(méi)有示范如何返回?cái)?shù)值,下例便告訴你怎么做:

# 可寫(xiě)函數(shù)說(shuō)明
def sum( arg1, arg2 ):
   # 返回2個(gè)參數(shù)的和."
   total = arg1 + arg2
   print "函數(shù)內(nèi) : ", total
   return total;
 
# 調(diào)用sum函數(shù)
total = sum( 10, 20 );

輸出結(jié)果如下:

函數(shù)內(nèi):30

全局變量和局部變量

定義在函數(shù)內(nèi)部的變量擁有一個(gè)局部作用域解滓,定義在函數(shù)外的擁有全局作用域赃磨。局部變量只能在其被聲明的函數(shù)內(nèi)部訪問(wèn),而全局變量可以在整個(gè)程序范圍內(nèi)訪問(wèn)洼裤。調(diào)用函數(shù)時(shí)邻辉,所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。如下實(shí)例:

total = 0; # 這是一個(gè)全局變量
# 可寫(xiě)函數(shù)說(shuō)明
def sum( arg1, arg2 ):
   #返回2個(gè)參數(shù)的和."
   total = arg1 + arg2; # total在這里是局部變量.
   print "函數(shù)內(nèi)是局部變量 : ", total
   return total;
 
#調(diào)用sum函數(shù)
sum( 10, 20 );
print "函數(shù)外是全局變量 : ", total 

輸出結(jié)果如下:

函數(shù)內(nèi)的局部變量是:30
函數(shù)外的全局變量是:0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逸邦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子在扰,更是在濱河造成了極大的恐慌缕减,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芒珠,死亡現(xiàn)場(chǎng)離奇詭異桥狡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)皱卓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)裹芝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人娜汁,你說(shuō)我怎么就攤上這事嫂易。” “怎么了掐禁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵怜械,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我傅事,道長(zhǎng)缕允,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任蹭越,我火速辦了婚禮障本,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘响鹃。我一直安慰自己驾霜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布买置。 她就那樣靜靜地躺著寄悯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堕义。 梳的紋絲不亂的頭發(fā)上猜旬,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天脆栋,我揣著相機(jī)與錄音,去河邊找鬼洒擦。 笑死椿争,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熟嫩。 我是一名探鬼主播秦踪,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掸茅!你這毒婦竟也來(lái)了椅邓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昧狮,失蹤者是張志新(化名)和其女友劉穎景馁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體逗鸣,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡合住,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撒璧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片透葛。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卿樱,靈堂內(nèi)的尸體忽然破棺而出僚害,到底是詐尸還是另有隱情,我是刑警寧澤繁调,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布贡珊,位于F島的核電站,受9級(jí)特大地震影響涉馁,放射性物質(zhì)發(fā)生泄漏门岔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一烤送、第九天 我趴在偏房一處隱蔽的房頂上張望寒随。 院中可真熱鬧,春花似錦帮坚、人聲如沸妻往。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讯泣。三九已至,卻和暖如春阅悍,著一層夾襖步出監(jiān)牢的瞬間好渠,已是汗流浹背昨稼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拳锚,地道東北人假栓。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像霍掺,于是被迫代替她去往敵國(guó)和親匾荆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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