函數(shù)
其實(shí)和數(shù)學(xué)上說(shuō)的函數(shù)也沒(méi)什么大的差別,就是將一系列的操作集中在一起斩狱。
eg:F(x) = 5x^2 + 6x + 24 ? ?當(dāng)你給定一個(gè) x 的時(shí)候,就會(huì)有函數(shù)的定義得到一個(gè)結(jié)果。當(dāng)我們多次需要這樣一種計(jì)算規(guī)則的時(shí)候则奥,我們定義了這個(gè)函數(shù),下次當(dāng)我們需要這樣的操作的時(shí)候狭园,我們只需要 F(2)读处,F(xiàn)(5)就可以得到結(jié)果,而不必:2^2 + 6*2 + 24 ,?5^2 + 6*5 + 24 這樣繁瑣的表達(dá)唱矛。
在Python中也大概是這樣的罚舱,一些重復(fù)的功能被我們封裝成函數(shù),以便于重復(fù)利用绎谦。
最簡(jiǎn)單的管闷,也是你經(jīng)常使用的 print()函數(shù),這就是一個(gè)Python 內(nèi)置的一個(gè)封裝好的函數(shù)窃肠。這是Python基于全局的考慮包个,幫我們封裝好的眾多函數(shù)之一。當(dāng)然我們也可以根據(jù)自己需要封裝自己的函數(shù)來(lái)完成自己的工作冤留。下面就簡(jiǎn)單介紹下定義函數(shù)的規(guī)則:
def ?func_name( parameters ):
? ? ? ?函數(shù)體
由 def 關(guān)鍵字 碧囊,函數(shù)名 , ?(參數(shù)列表): , ?函數(shù)體四部分組成。
tips:函數(shù)體必須縮進(jìn)纤怒。參數(shù)列表放在圓括號(hào)中間糯而。一般而言,在我們調(diào)用函數(shù)的時(shí)候肪跋,需要按照參數(shù)列表的順序進(jìn)行傳參歧蒋。
函數(shù)調(diào)用
在剛才的小建議中土砂,已經(jīng)提到了函數(shù)的調(diào)用,就像數(shù)學(xué)中的給F(x) 中的 x 賦值一樣谜洽,我們也需要給參數(shù)列表賦值萝映。
在這個(gè)例子中我們傳遞一個(gè)參數(shù)到函數(shù)體內(nèi),然后得到結(jié)果阐虚。
在Python語(yǔ)言設(shè)計(jì)的時(shí)候借鑒了許多其他語(yǔ)言優(yōu)秀的設(shè)計(jì)序臂。接下來(lái)我們對(duì)上面小建議進(jìn)行展開(kāi)。剛才我們說(shuō)“一般而言实束,在我們調(diào)用函數(shù)的時(shí)候奥秆,需要按照參數(shù)列表的順序進(jìn)行傳參∠滩樱”其實(shí)這就是一般而言构订,其實(shí)Python 可以像 C++ 一樣設(shè)置默認(rèn)參數(shù),而且改變傳參的順序避矢。還是舉個(gè)栗子吧:
我們定義一個(gè)打印中國(guó)人個(gè)人信息的函數(shù):
上面函數(shù)的定義中悼瘾,我們使用了默認(rèn)參數(shù),就是說(shuō)审胸,這個(gè)參數(shù)本身就是有值的亥宿,如果有傳參進(jìn)來(lái)的值就是用傳進(jìn)來(lái)的值,沒(méi)有的話就使用默認(rèn)的值砂沛。上面的栗子也可以說(shuō)明這個(gè)問(wèn)題烫扼,打印中國(guó)人信息,我們默認(rèn)為國(guó)籍是中國(guó)碍庵,但是也有許多中國(guó)籍猶太人映企,中國(guó)籍美國(guó)人?這種稍有差別的需要區(qū)分,使用默認(rèn)參數(shù)很方便說(shuō)明這個(gè)問(wèn)題怎抛。
不按順序傳參的時(shí)候卑吭,需要使用參數(shù)名來(lái)與參數(shù)列表進(jìn)行對(duì)應(yīng),另外默認(rèn)參數(shù)使用的時(shí)候盡量不要改變傳參順序马绝,非要改變的話豆赏,也需要使用參數(shù)名來(lái)與參數(shù)列表進(jìn)行對(duì)應(yīng),以免出錯(cuò)富稻。
不定參數(shù)
我們計(jì)算兩個(gè)數(shù)的和
我們計(jì)算三個(gè)數(shù)的和
我們計(jì)算四個(gè)數(shù)的和
我們計(jì)算五個(gè)數(shù)的和
……
難道我們需要分別定義一個(gè)函數(shù)么掷邦?
一個(gè)帶星號(hào)(*)的變量名會(huì)存放所有未命名的變量參數(shù)。此例中椭赋,傳入的參數(shù)就被存儲(chǔ)在 vartuple 中抚岗。
匿名函數(shù)
其實(shí)匿名函數(shù)只是一個(gè)?lambda?表達(dá)式 ,格式簡(jiǎn)單哪怔,功能也有限宣蔚,不適合封裝復(fù)雜的邏輯向抢。
格式:lambda [arg1 ,arg2,.....argn]:expression
其他
在一段程序中的變量并不是在哪個(gè)位置都可以訪問(wèn)的。訪問(wèn)權(quán)限決定于這個(gè)變量的作用域胚委。變量的作用域決定了在哪一部分程序你可以訪問(wèn)這個(gè)變量挟鸠。定義在函數(shù)內(nèi)部的變量擁有一個(gè)局部作用域,所以它叫做局部變量亩冬,定義在函數(shù)外的擁有全局作用域艘希,它被叫做全局變量。局部變量只能在其被聲明的函數(shù)內(nèi)部訪問(wèn)硅急,而全局變量可以在整個(gè)程序范圍內(nèi)訪問(wèn)覆享。
Then,that’s all营袜,thank you撒顿。