跟老齊學Python之永遠強大的函數

來源:互聯網
上載者:User
函數,對於人類來講,能夠發展到這個數學思維層次,是一個飛躍。可以說,它的提出,直接加快了現代科技和社會的發展,不論是現代的任何科技門類,乃至於經濟學、政治學、社會學等,都已經普遍使用函數。

下面一段來自維基百科(在本教程中,大量的定義來自維基百科,因為它真的很百科):函數詞條

函數這個數學名詞是萊布尼茲在1694年開始使用的,以描述曲線的一個相關量,如曲線的斜率或者曲線上的某一點。萊布尼茲所指的函數現在被稱作可導函數,數學家之外的普通人一般接觸到的函數即屬此類。對於可導函數可以討論它的極限和導數。此兩者描述了函數輸出值的變化同輸入值變化的關係,是微積分學的基礎。中文的“函數”一詞由清朝數學家李善蘭譯出。其《代數學》書中解釋:“凡此變數中函(包含)彼變數者,則此為彼之函數”。

函數,從簡單到複雜,各式各樣。前面提供的維基百科中的函數詞條,裡面可以做一個概覽。但不管什麼樣子的函數,都可以用概括:

有初中數學水平都能理解一個大概了。這裡不贅述。

本講重點說明用python怎麼來做一個函數用一用。

深入理解函數

在中學數學中,可以用這樣的方式定義函數:y=4x+3,這就是一個一次函數,當然,也可以寫成:f(x)=4x+3。其中x是變數,它可以代表任何數。

當x=2時,代入到上面的函數運算式:f(2) = 4*2+3 = 11所以:f(2) = 11

以上對函數的理解,是一般初中生都能打到的。但是,如果看官已經初中畢業了,或者是一個有追求的初中生,還不能局限在上面的理解,還要將函數的理解拓展。

變數不僅僅是數

變數x只能是任意數嗎?其實,一個函數,就是一個對應關係。看官嘗試著將上面運算式的x理解為餡餅,4x+3,就是4個餡餅在加上3(單位是什麼,就不重要了),這個結果對應著另外一個東西,那個東西比如說是iphone。或者說可以理解為4個餡餅加3就對應一個iphone。這就是所謂映射關係。

所以,x,不僅僅是數,可以是你認為的任何東西。

變數本質——預留位置

函數中為什麼變數用x?這是一個有趣的問題,自己google一下,看能不能找到答案。

我也不清楚原因。不過,我清楚地知道,變數可以用x,也可以用別的符號,比如y,z,k,i,j...,甚至用alpha,beta,qiwei,qiwsir這樣的字母組合也可以。

變數在本質上就是一個預留位置。這是一針見血的理解。什麼是預留位置?就是先把那個位置用變數占上,表示這裡有一個東西,至於這個位置放什麼東西,以後再說,反正先用一個符號佔著這個位置(預留位置)。

其實在進階語言編程中,變數比我們在初中數學中學習的要複雜。但是,現在我們先不管那些,複雜東西放在以後再說了。現在,就按照初中數學來研究python中的變數

通常使小寫字母來命名python中的變數,也可以在其中加上底線什麼的,表示區別。

比如:alpha,x,j,p_beta,這些都可以做為python的變數。

給變數賦值

開啟IDLE,實驗操作如下:

>>> a = 2  #注1>>> a    #注22>>> b = 3  #注3>>> c = 3>>> b3>>> c3>>> 

說明:

注1:a=2的含義是將一個變數a指向了2這個數,就好比叫做a是的釣魚的人,通過魚線,跟一條叫做2的魚串連者,a通過魚線就可以導到2
注2:相當於要a這個釣魚的人,順著魚線匯出那條魚,看看串連的是哪一條,發現是叫做2的那條傻魚
注3:b=3,理解同上。那麼c=3呢?就是這條叫做3的魚被兩個人同時釣到了。

建立簡單函數

>>> a = 2>>> y=3*a+2>>> y8

這種方式建立的函數,跟在初中數學中學習的沒有什麼區別。當然,這種方式的函數,在編程實踐中的用途不大,一般是在學習階段理解函數來使用的。

別急躁,你在輸入a=3,然後輸入y,看看得到什麼結果呢?

>>> a=2>>> y=3*a+2>>> y8>>> a=3>>> y8

是不是很奇怪?為什麼後面已經讓a等於3了,結果y還是8。

用前面的釣魚理論就可以解釋了。a和2相連,經過計算,y和8相連了。後面a的連線物件修改了,但是y的連線物件還沒有變,所以,還是8。再計算一次,y的連線物件就變了:

>>> a=3>>> y8>>> y=3*a+2>>> y11

特別注意,如果沒有先a=2,就直接下函數運算式了,像這樣,就會報錯。

>>> y=3*a+2Traceback (most recent call last): File "", line 1, in  NameError: name 'a' is not defined

注意看錯誤提示,a是一個變數,提示中告訴我們這個變數沒有定義。顯然,如果函數中要使用某個變數,不得不提前定義出來。定義方法就是給這個變數複製。

建立實用的函數

上面用命令方式建立函數,還不夠“正規化”,那麼就來寫一個.py檔案吧。

在IDLE中,File->New window

然後輸入如下代碼:

#coding:utf-8def add_function(a,b):  c = a+b  print cif __name__=="__main__":  add_function(2,3)

然後將檔案儲存,我把她命名為106-1.py,你根據自己的喜好取個名字。

然後我就進入到那個檔案夾,運行這個檔案,出現下面的結果,

你啟動並執行結果是什嗎?如果沒有得到上面的結果,你就非常認真地檢查代碼,是否跟我寫的完全一樣,注意,包括冒號和空格,都得一樣。冒號和空格很重要。

下面開始庖丁解牛:

#coding:utf-8 聲明本檔案中代碼的字元集類型是utf-8格式。初學者如果還不理解,一方面可以去google,另外還可放一放,就先這麼抄寫下來,以後會講解。def add_function(a,b): 這裡是函數的開始。在聲明要建立一個函數的時候,一定要使用def(def 就是英文define的前三個字母),意思就是告知電腦,這裡要聲明一個函數;add_function是這個函數名稱,取名字是有講究的,就好比你的名字一樣。在python中取名字的講究就是要有一定意義,能夠從名字中看出這個函數是用來幹什麼的。從add_function這個名字中,是不是看出她是用來計算加法的呢?(a,b)這個括弧裡面的是這個函數的參數,也就是函數變數。冒號,這個冒號非常非常重要,如果少了,就報錯了。冒號的意思就是下面好開始真正的函數內容了。c=a+b 特別注意,這一行比上一行要縮排四個空格。這是python的規定,要牢記,不可丟掉,丟了就報錯。然後這句話就是將兩個參數(變數)相加,結果賦值與另外一個變數c。print c 還是提醒看官注意,縮排四個空格。將得到的結果c的值列印出來。if name=="main": 這句話先照抄,不解釋。注意就是不縮排了。add_function(2,3) 這才是真正調用前面建立的函數,並且傳入兩個參數:a=2,b=3。仔細觀察傳入參數的方法,就是把2放在a那個位置,3放在b那個位置(所以說,變數就是預留位置).

解牛完畢,做個總結:

聲明函數的格式為:

def 函數名(參數1,參數2,...,參數n):

函數體

是不是樣式很簡單呢?

取名字的學問

有的大師,會通過某個人的名字來預測他/她的吉凶禍福等。看來名字這玩意太重要了。取個好名字,就有好兆頭呀。所以孔丘先生說“名不正,言不順”,歪解:名字不正規化,就不順。這是歪解,希望不要影響看官正確理解。不知道大師們是不是能夠通過外國人名字預測外國人大的吉凶禍福呢?

不管怎樣,某國人是很在意名字的,旁邊有個國家似乎就不在乎。

python也很在乎名字問題,其實,所有進階語言對名字都有要求。為什麼呢?因為如果命名亂了,電腦就有點不知所措了。看python對命名的一般要求。

檔案名稱:全小寫,可使用底線

函數名:小寫,可以用底線風格單詞以增加可讀性。如:myfunction,my_example_function。注意:混合大小寫僅被允許用於這種風格已經佔據優勢的時候,以便保持向後相容。

函數的參數:如果一個函數的參數名稱和保留的關鍵字(所謂保留關鍵字,就是python語言已經佔用的名稱,通常被用來做為已經有的函數等的命名了,你如果還用,就不行了。)衝突,通常使用一個尾碼底線好於使用縮寫或奇怪的拼字。

變數:變數名全部小寫,由底線串連各個單詞。如color = WHITE,this_is_a_variable = 1。

其實,關於命名的問題,還有不少爭論呢?最典型的是所謂匈牙利命名法、駝峰命名等。如果你喜歡,可以google一下。以下內容供參考:

匈牙利命名法
駝峰式大小寫
帕斯卡命名法
python命名的官方要求,如果看官的英文可以,一定要閱讀。如果英文稍遜,可以來閱讀中文,不用梯子能行嗎?看你命了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.