python之13-函數(shù)

詳細(xì)請(qǐng)參考:https://www.cnblogs.com/Neeo/articles/11261365.html

函數(shù)是通用程序的組件(部件)讨便,在別的語(yǔ)言中或稱為過(guò)程或子例程崖疤。函數(shù)也是工具邻奠。
通俗的說(shuō),我們可以把函數(shù)想象為一個(gè)黑匣子,將數(shù)據(jù)(1+1)傳遞進(jìn)去,經(jīng)過(guò)內(nèi)部一番如此這般之后,然后得到了想要的結(jié)果


1泄私、 函數(shù)的定義和調(diào)用

def <function_name>([arg1,agr2,…argn]):
    ''' functional annotation '''
    pass
    return

通過(guò)def關(guān)鍵字來(lái)定義函數(shù),空格之后的function_name為函數(shù)名(必須有)备闲,函數(shù)的命名規(guī)則參考變量的命名晌端。括號(hào)(必須有)內(nèi)的參數(shù)是可選的,括號(hào)后面的冒號(hào):也是必須的恬砂。注釋部分為可選的(但強(qiáng)烈建議有注釋咧纠,就像產(chǎn)品的說(shuō)明書(shū)一樣),pass部分為函數(shù)的具體功能實(shí)現(xiàn)代碼泻骤。執(zhí)行結(jié)果視情況可以選擇用return返回漆羔,如果沒(méi)有顯式的return具體內(nèi)容的話,默認(rèn)返回None狱掂。
雖然def為關(guān)鍵字演痒,但def也是可執(zhí)行的語(yǔ)句,就是說(shuō)當(dāng)定義完函數(shù)之前趋惨,這個(gè)函數(shù)此時(shí)是不存在的:

print(dir())  # ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
def foo():
    pass
print(dir())  # ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'foo']

由第一個(gè)打印結(jié)果顯示鸟顺,當(dāng)程序執(zhí)行到def語(yǔ)句之前,foo函數(shù)還不存在器虾,而當(dāng)def執(zhí)行完畢诊沪,第二個(gè)打印結(jié)果告訴我們养筒,在當(dāng)前的名稱空間內(nèi)已經(jīng)存在了foo函數(shù)。
注意:dir()函數(shù)返回綁定在當(dāng)前名稱空間內(nèi)(如果參數(shù)為空)的變量端姚。

當(dāng)Python解釋器執(zhí)行到def語(yǔ)句時(shí),def語(yǔ)句創(chuàng)建一個(gè)函數(shù)對(duì)象并將這個(gè)對(duì)象賦值給def后面function_name變量挤悉。然后這個(gè)變量指向這個(gè)函數(shù)渐裸,或者說(shuō)這個(gè)函數(shù)名(變量名)成為了這個(gè)函數(shù)的引用。

def foo():  
    print("foo function")  
def bar():  
    print("bar function")  
if 1:  
    foo()
else:  
    bar()  
for i in range(10):  
    if i == 2:  
        foo()  
    else:  
        bar()  

通過(guò)上面的例子装悲,也可以看到昏鹃, foo()和bar()函數(shù)一處定義,多處調(diào)用诀诊。這也是函數(shù)的特點(diǎn):

  • 最大化的減少代碼冗余和代碼重用洞渤。
  • 程序的結(jié)構(gòu)分解,也就是解耦合属瓣。
  • 打包打代碼载迄,使功能更加獨(dú)立。

`切記:函數(shù)一定要先定義抡蛙,后調(diào)用

def foo():
    return 'hello'

print(foo)  # <function foo at 0x000001FFCE7FC1E0>
print(foo())  # hello

通過(guò)上面的例子我們發(fā)現(xiàn):

  • 打印函數(shù)名不加括號(hào)护昧,打印的是函數(shù)在內(nèi)存中的地址
  • 打印函數(shù)名加上括號(hào),打印的是函數(shù)執(zhí)行的結(jié)果

注:一定要養(yǎng)成良好的習(xí)慣粗截,寫(xiě)注釋

2惋耙、 函數(shù)的返回值

1>函數(shù)沒(méi)有return,也就是沒(méi)有返回值
def foo():
    pass

f = foo()
print(f)  # None

如上例所示熊昌,如果函數(shù)沒(méi)有顯式的寫(xiě)return绽榛,那么默認(rèn)返回None。我們可以理解為當(dāng)我們沒(méi)有寫(xiě)return時(shí)婿屹,該函數(shù)默認(rèn)return None灭美。

2>返回一個(gè)值
def foo():
    # return 'wwj'  # wwj
    # return len('wwj')  # 3
    # return [1, 2, 3]  # [1, 2, 3]
    # return ('aa', 'bb', 'cc')
    # return {'wwj', 'age', 'apple'}
    return {'name': 'wwj', 'age': '20'}


f = foo()
# print(f, type(f))  # wwj <class 'str'>
# print(f, type(f))  # 3 <class 'int'>
# print(f[1], type(f))  # 2 <class 'list'>
# print(f[0], type(f))  # aa <class 'tuple'>
# print(list(f)[0],type(f))  # apple <class 'set'>
print(f["age"], type(f))  # 20 <class 'dict'>

可以看到return返回的值可以是任意類型,不同類型不同的取值方法

3>返回多個(gè)值

當(dāng)返回多個(gè)值的時(shí)候选泻,值之間需要用逗號(hào)隔開(kāi)冲粤,最后多個(gè)值以元組的方式返回。

def foo():  
    return 1, 2, {'a': 'b'}, [3, 4]  
    print(res)  # 該打印語(yǔ)句沒(méi)有執(zhí)行
result = foo()  
print(result)                   # 結(jié)果為:(1, 2, {'a': 'b'}, [3, 4])  
print(result[2])                # 結(jié)果為:{'a': 'b'}  

可以看到页眯,return之后的print語(yǔ)句并沒(méi)有執(zhí)行梯捕。這也是return的另個(gè)一個(gè)特點(diǎn),那就是終止函數(shù)的執(zhí)行窝撵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末傀顾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碌奉,更是在濱河造成了極大的恐慌短曾,老刑警劉巖寒砖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嫉拐,居然都是意外死亡哩都,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)婉徘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)漠嵌,“玉大人,你說(shuō)我怎么就攤上這事盖呼∪迓梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵几晤,是天一觀的道長(zhǎng)约炎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蟹瘾,這世上最難降的妖魔是什么圾浅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮热芹,結(jié)果婚禮上贱傀,老公的妹妹穿的比我還像新娘。我一直安慰自己伊脓,他們只是感情好府寒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著报腔,像睡著了一般株搔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纯蛾,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天纤房,我揣著相機(jī)與錄音,去河邊找鬼翻诉。 笑死炮姨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碰煌。 我是一名探鬼主播舒岸,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼芦圾!你這毒婦竟也來(lái)了蛾派?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洪乍,沒(méi)想到半個(gè)月后眯杏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壳澳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年岂贩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钾埂。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡河闰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褥紫,到底是詐尸還是另有隱情,我是刑警寧澤瞪慧,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布髓考,位于F島的核電站,受9級(jí)特大地震影響弃酌,放射性物質(zhì)發(fā)生泄漏氨菇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一妓湘、第九天 我趴在偏房一處隱蔽的房頂上張望查蓉。 院中可真熱鬧,春花似錦榜贴、人聲如沸豌研。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鹃共。三九已至,卻和暖如春驶拱,著一層夾襖步出監(jiān)牢的瞬間霜浴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工蓝纲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阴孟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓税迷,卻偏偏與公主長(zhǎng)得像永丝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翁狐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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