Python函數(shù)定義捞附,參數(shù)巾乳,調(diào)用

函數(shù)

目的就是函數(shù)(function)。function這個單詞鸟召,有功能的含義胆绊,所以函數(shù)其實是實現(xiàn)了一種功能。

python語句構成函數(shù)欧募。函數(shù)的一個功能在于封裝和復用压状。
封裝:通過函數(shù)的語法,我們把好多的語句放在一起跟继,并且給他們起了名字(函數(shù)名)种冬,從而把語句封裝成函數(shù)。

#func1對line3-line5進行了封裝  
def func1(a,b,c):
    print(a)
    print(b)
    print(c)

復用:也就是反復使用舔糖。
如果你要反復使用一個代碼片段娱两,沒有函數(shù)的話,你要不斷復制粘貼金吗,工作量很大十兢,更嚴重的問題趣竣,在于,如果你對這個代碼片段做出修改的話旱物,那么每一個你粘貼的地方都需要修改遥缕,要是你忘了一處怎么辦?宵呛!
這個就叫做可維護性極差通砍。

而有了函數(shù),你不是封裝了代碼片段嗎烤蜕,你只需要在封裝處進行修改封孙,那么各個地方就可以正確使用啦。是不是很神奇呢讽营!
所以說虎忌,封裝是復用的基礎。

黑盒子(函數(shù))

當我們提到函數(shù)時候橱鹏,你應該首先在腦海中浮現(xiàn)出一個黑盒子膜蠢。因為是黑盒子,所以它里面的東西你是看不到的莉兰。這個盒子就是函數(shù)挑围,盒子的名字,就是函數(shù)名糖荒。盒子里面杉辙,就是就是代碼片段。

下面捶朵,我們引入函數(shù)的正式定義:

函數(shù):一段可以直接被另一段程序引用的程序蜘矢。也叫做子程序、(OOP中)方法综看。

一段:意味著是代碼片段品腹,具體代碼片段是什么,我們在黑盒子階段并不關心红碑。

引用:也就是函數(shù)調(diào)用舞吭,后面我們將會給大家介紹。一個函數(shù)內(nèi)部的代碼片段可以調(diào)用其它函數(shù)析珊,被調(diào)用的函數(shù)就叫做子函數(shù)羡鸥,這個形式類似于條件嵌套。

方法:當一個函數(shù)在類中聲明時唾琼,它就成為了這個類的方法(method)兄春。類的概念后面會詳細跟大家講澎剥。

OOP中方法:面向?qū)ο蟪绦蛟O計(Object Oriented Programming)的一種方法锡溯,我們后面在講解類的知識點時會體會到赶舆。

如果可以,請你用自己的語句說下你對函數(shù)的理解祭饭。
制造一個黑盒子(聲明函數(shù))
怎么制造一個黑盒子呢芜茵?也就是怎么聲明或者說怎么定義一個函數(shù)呢?
我來舉個例子:

def greet(name):
    print(name+'早上好')
    return

line1:def關鍵字表示開始定義函數(shù)倡蝙,greet是函數(shù)名九串,name叫做函數(shù)的參數(shù)
line2和line3是函數(shù)內(nèi)部的代碼片段。其中l(wèi)ine2輸出了一句話寺鸥,
line3 return表示函數(shù)返回猪钮,也就是函數(shù)結束的意思。

從黑盒子角度來看胆建,我們知道了這個盒子叫做greet烤低,盒子期待著一個參數(shù),參數(shù)名稱是name笆载,盒子沒有返回數(shù)據(jù)(即return后面沒內(nèi)容)扑馁,用行話講,叫做函數(shù)返回了None凉驻。

到這里腻要,你就得到了一個黑盒子。

函數(shù)名:最好是取體現(xiàn)函數(shù)功能的名字涝登,一般用小寫字母和單下劃線雄家、數(shù)字等組合

def greet(name):

參數(shù):根據(jù)函數(shù)功能,括號里可以有多個參數(shù)胀滚,也可以不帶參數(shù)咳短,命名規(guī)則與函數(shù)名相同

規(guī)范:括號是英文括號,后面的冒號不能丟

print(name+'早上好')  

函數(shù)體:函數(shù)體就是體現(xiàn)函數(shù)功能的語句蛛淋,要縮進咙好,一般是四個空格
函數(shù)的參數(shù)可以有一個,也可以有兩個褐荷,也可以有很多個勾效。也可以沒有。

def pika1():
    print('我最喜愛的神奇寶貝是皮卡丘')

比如pika1這個函數(shù)就是沒有參數(shù)的叛甫,但是它依然是一個函數(shù)层宫。

怎么使用黑盒子(調(diào)用函數(shù))

聲明一個函數(shù)后,如果使用它其监,也就是怎么調(diào)用它呢萌腿?

如果你聲明函數(shù)而不調(diào)用函數(shù),那相等于掙了很多錢抖苦,但是不花錢一樣毁菱。

python里面調(diào)用函數(shù)很簡單米死,輸入函數(shù)名和參數(shù)的值就可以:
函數(shù)名.()
看以下實例:

#我們把name叫做形參,形式參數(shù)
def pika2(name):    
    print('我最喜愛的神奇寶貝是'+name)

#我們把'皮卡丘',噴火龍叫做實參贮庞,實際參數(shù)

pika2('皮卡丘')  #調(diào)用函數(shù)峦筒,輸入函數(shù)名pika()并輸入?yún)?shù)'皮卡丘'

pika2('噴火龍')  #調(diào)用函數(shù),輸入函數(shù)名pika()并輸入?yún)?shù)'噴火龍'

這個例子想和大家講的是:調(diào)用函數(shù)最關鍵的是窗慎,弄清楚函數(shù)有多少個參數(shù)物喷,如何給參數(shù)賦值。這個過程遮斥,用行話講峦失,叫“傳參”。

形參是變量名术吗,聲明函數(shù)時使用宠进,實參是變量值,調(diào)用函數(shù)時使用藐翎。請嚴格區(qū)分這兩個概念材蹬。

舉個復雜一些的例子:

def process_response(request, response, spider):
        # Called with the response returned from the downloader.

        # Must either;
        # - return a Response object
        # - return a Request object
        # - or raise IgnoreRequest
    return response
process_response(123,456,789)

這個函數(shù)process_response有3個參數(shù),分別是request,response,spider吝镣。
傳參時候就需要按照順序把這3個參數(shù)傳遞進去堤器,從而調(diào)用函數(shù)。

所以末贾,你只要把函數(shù)想象成黑盒子闸溃,把黑盒子叫什么名字,期待什么輸入搞明白拱撵,再復雜的函數(shù)也難不倒你辉川!

關于參數(shù)

無參數(shù)函數(shù)

def a(): #定義一個函數(shù),無任何參數(shù)
   print(123)#函數(shù)體拴测,執(zhí)行函數(shù)內(nèi)的語句
a()  #調(diào)用函數(shù)乓旗,只有調(diào)用后程序才會去運行函數(shù)

有形式參數(shù)函數(shù)

def a(c): #定義一個函數(shù),有一個形式參數(shù)
   print(c)#函數(shù)體集索,執(zhí)行函數(shù)內(nèi)的語句屿愚,記得要縮進
a(99)  #調(diào)用函數(shù)一定要寫入實際參數(shù),這里寫入了99

如果函數(shù)里有形式參數(shù)务荆,那么調(diào)用時一定要寫上參數(shù)妆距,否則會報錯。

帶有默認參數(shù)

def a(c,d=100): #定義一個函數(shù)函匕,有一個形式參數(shù)娱据,一個默認參數(shù)
   print(c+d)#函數(shù)體,執(zhí)行函數(shù)內(nèi)的語句
a(99)  #調(diào)用函數(shù)盅惜,只有調(diào)用程序才會運行函數(shù)

注意中剩,默認參數(shù)一定要放在最后忌穿。

def a(c,d=100): #定義一個函數(shù),有一個形式參數(shù)咽安,一個默認參數(shù)
   print(c+d)#函數(shù)體伴网,執(zhí)行函數(shù)內(nèi)的語句
a(99蓬推,1)  #調(diào)用函數(shù)妆棒,只有調(diào)用程序才會運行函數(shù)  

注意,當輸入了兩個參數(shù)時沸伏,第二個參數(shù)會覆蓋默認參數(shù)糕珊。

不定參數(shù)

def a(*e): #定義一個函數(shù),有一個形式參數(shù)
   print(e)#函數(shù)體毅糟,執(zhí)行函數(shù)內(nèi)的語句
a(99,1,100,200)  #調(diào)用函數(shù)红选,只有調(diào)用程序才會運行函數(shù)

打印出 (99, 1, 100, 200)

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姆另,隨后出現(xiàn)的幾起案子喇肋,更是在濱河造成了極大的恐慌,老刑警劉巖迹辐,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝶防,死亡現(xiàn)場離奇詭異,居然都是意外死亡明吩,警方通過查閱死者的電腦和手機间学,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來印荔,“玉大人低葫,你說我怎么就攤上這事∪月桑” “怎么了嘿悬?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長水泉。 經(jīng)常有香客問我鹊漠,道長,這世上最難降的妖魔是什么茶行? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任躯概,我火速辦了婚禮,結果婚禮上畔师,老公的妹妹穿的比我還像新娘娶靡。我一直安慰自己,他們只是感情好看锉,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布姿锭。 她就那樣靜靜地躺著塔鳍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呻此。 梳的紋絲不亂的頭發(fā)上轮纫,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音焚鲜,去河邊找鬼掌唾。 笑死,一個胖子當著我的面吹牛忿磅,可吹牛的內(nèi)容都是我干的糯彬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼葱她,長吁一口氣:“原來是場噩夢啊……” “哼撩扒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吨些,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤搓谆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后豪墅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泉手,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年但校,在試婚紗的時候發(fā)現(xiàn)自己被綠了螃诅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡状囱,死狀恐怖术裸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亭枷,我是刑警寧澤袭艺,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站叨粘,受9級特大地震影響猾编,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜升敲,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一答倡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驴党,春花似錦瘪撇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恕曲。三九已至,卻和暖如春渤涌,著一層夾襖步出監(jiān)牢的瞬間佩谣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工实蓬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茸俭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓瞳秽,卻偏偏與公主長得像瓣履,于是被迫代替她去往敵國和親率翅。 傳聞我的和親對象是個殘疾皇子练俐,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355