零基礎學習 Python 之與函數的初次相見

  • 2019 年 11 月 7 日
  • 筆記

寫在之前

大家好,這裡是零基礎學習 Python 系列,在這裡我將從最基本的Python 寫起,然後再慢慢涉及到高階以及具體應用方面。我是完全自學的 Python,所以很是明白自學對於一個人的考驗,所以在這裡我會盡我最大的努力,把 Python 儘可能簡單的表述清楚,讓更多想要學習 Python 的朋友能夠入門。同時寫這個教程也算是對自己之前所學知識的一個鞏固和提高,喜歡的朋友們可以點個關注,有問題歡迎隨時和我交流。本文所有的代碼編寫均是Python3 版本。

今天我們又開始了新的篇章 — 函數篇,在現代的任何科技門類,乃至於政治學,經濟學等都已經普遍使用函數,可以說函數的出現直接的加快了現代科技和社會的發展,下面就開始我們與 Python 中的函數的初次相見吧。

函數是什麼?

在我們學生時代的數學中,定義函數的方式一般是這樣的:y = ax + b,這是一個一次函數,當然我們也可以寫成 f(x) = ax + b,其中 x 是變量,可以代表任何數,但是這個並不是函數的全部,在函數中,其實變量並沒有規定只能是數,它可以是豬狗牛羊,也可以是花鳥木魚,說到這不知道你有沒有理解我的意思,其實,函數就是一種映射。

如果你嘗試着將變量 x 理解為小豬佩奇,那麼 ax + b 就是 a 個佩奇再加上 b,這個結果對應着的是另一個東西,比如熊大,即我們可以理解為 a 個佩奇加上 b 就對應的是熊大,這就是我們所說的映射關係。

如果你理解了這些,我們下面用純粹的中學的數學方式,在 Python 中建立函數:

>>> x = 6  >>> y = 2 * x + 1  >>> y  13

在我們的學生時代我們就是這麼用的,那麼在 Python 中這種方式還有用嗎?上面的例子我們建立了一個所謂的函數,那麼我們來嘗試改變一下 x 的值:

>>> x = 7  >>> y  13

結果是 y 的值並沒有改變,所以說用純粹的數學方式定義函數在 Python 中其實並沒有什麼用,所以我們要用一種新的定義函數的方式,請接着向下看。

如何定義函數?

在 Python 中定義了函數的格式,下面我舉一個例子來說一下 Python 中函數的格式和調用的方法:

>>> def add(x,y):  ...     return x + y

上面的例子雖然短小,但內有乾坤,下面我以此函數為例,詳述函數的組成。

1. 「def」 :def 是函數的開始,也就是在聲明要創建一個函數的時候,一定要先使用 def,這就是告訴 Python 解析器,這裡要聲明的是一個函數。

2. 「add」:add 是函數的名稱,在 Python 中起名字的講究就是要起的有意義,能從函數的名字上看出這個函數是幹什麼的。同時函數的命名規範和變量名是一樣的,必須使用字母和下劃線開頭,且僅能含有字母,數字和下劃線。

3. 「( x,y )」:這個是參數列表,要寫在括號里,其中的參數指向函數的輸入,本例中函數有兩項輸入,但是通常情況下,輸入的個數可以是任意的,也包括 0 個。

4. 「 : 」 :冒號非常重要,如果少了,會報錯,所以希望你們不要像我一樣。

5. 「return a + b」:這一行,就是函數體了,函數體是縮進了 4 個空格的代碼塊,完成你需要完成的工作。 return 是函數的關鍵字,意思是要返回一個值,函數中的 return 也不是必須要寫的,如果不寫的話, Python 會默認返回一個值,那就是 None。

調用函數

在這之前,我們想一下我們為什麼要寫函數?理論上來說,不用函數也可以寫代碼,之所以用函數,大佬們給我們總結了以下幾點,我在這借花獻佛:

1. 寫函數可以降低編程的難度。通常將一個複雜的大問題分解成一系列更小的問題,然後小問題再分解成更小的問題,當問題細化到足夠簡單時,就可以分而治之。

2. 代碼重用。其實我們在編程的時候比較忌諱同一段代碼不斷重複,因此有必要將某個常用的功能抽象為一段公用的代碼,也就是函數。

從上面來看,使用函數還是很有必要的,下面就來看看函數是怎麼調用的:

>>> def add(x,y):  ...     print('x = {}'.format(x))  ...     print('y = {}'.format(y))  ...     return x + y

我們把之前的例子稍作改變,然後接下來看:

>>> add(10,3)  x = 10  y = 3  13  >>> add(3,10)  x = 3  y = 10  13

函數調用,最關鍵的是要弄懂如何給函數的參數賦值,上面就是按照參數次序賦值,根據參數的位置,值與之相對應。

>>> add(x = 3,y = 10)  x = 3  y = 10  13  >>> add(y = 10,x = 3)  x = 3  y = 10  13

還可以像上面一樣直接把賦值語句寫到裏面,這就明確了參數和對象的關係,這個時候順序就不重要了。

當然還可以在定義函數的時候就賦給一個默認值,如果不給那個有默認值的參數賦值,那麼它就用默認值,如果給它傳一個,則採用新傳給它的值:

>>> def add(x,y = 1):  ...     print('x = {}'.format(x))  ...     print('y = ',y)  ...     return x + y  ...  >>> add(1)  x = 1  y =  1  2  >>> add(1,1000000)  x = 1  y =  1000000  1000001

在這裡想在強調一次,參數和對象的關係與變量和對象的關係一樣,即在函數中的參數所傳的都是對象的引用,而不是對象本身。

寫在最後

到此為止,函數的基本知識估計朋友們也了解了,這一部分是我們接下來進一步的學習函數的基礎,希望你能掌握,接下來我會和你們一起對函數的其它部分進行進一步的研究。

最後感謝你能看到這裡,希望我寫的東西能夠讓你有到收穫,但是我還是希望我在文章里插入的代碼,你們能自己動手試一下,都很簡單。原創不易,每一個字,每一個標點都是自己手敲的,所以希望大家能多給點支持,該關注關注,該點贊點贊,該轉發轉發,有什麼問題歡迎在後台聯繫我,也可以在公眾號找到我的微信加我。