零基礎學習 Python 之函數的應用

2021-01-20 Python空間

寫在之前

函數是很有深度的,需要我們深入探究,實踐過程中,有很多對函數的不同理解,需要我們在學習的過程中不斷的思考,下面我們在昨天文章(零基礎學習 Python 之與函數的初次相見)的基礎上,再學習一些函數的相關應用。

返回值

所謂的返回值,就是在調用函數的地方由函數返回的數據。下面我們用我們最熟悉的斐波那契數列為例,我們編寫一個函數來實現斐波那契數列:

>>> deffibs(n):... res = [0,1]... for i in range(n-2):... res.append(res[-2] + res[-1])... return res... >>> if __name__ == "__main__":... now = fibs(10)... print(now)...

在上面的代碼中我們首先定義了一個函數,名字叫做 fibs,參數是輸入一個整數(其實你輸入非整數也是可以的,只是結果不同),然後通過 now = fibs(10) 調用這個函數。這裡的參數給的是 10,這就以為著要得到的是 n = 10 的斐波那契數列。運行以後的結果如下 :

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

當然如果你想換 n 的值,只需要在調用的時候修改一下參數就好了。然後我們來觀察上面的函數,最後有一個語句 return res,意思是將 res 的值返回,但是返回給誰呢?這要看是在什麼位置調用的函數。在上面的代碼中,用 now = fibs(10) 調用了函數,那麼函數就將值返回到當前狀態,並記錄在內存中,然後把它賦值給變量 now。

需要注意的,上面雖然返回的是列表,但其實只是返回了一個返回值,有時候我們需要返回多個的時候,要用元組的方式。

>>> defmy_digit():... return1,2,3... >>> now = my_digit()>>> now(1, 2, 3)

對於上面的這個函數,其實我們還可以像下面一樣:

>>> x,y,z = my_digit()>>> x1>>> y2>>> z3

並不是所以的函數都有 return,比如某些函數就只是執行一條語句或者乾脆什麼也不做,它們不需要返回值,其實看過昨天文章的朋友可能會有印象,其實它們也有,只不過是 None。比如下面的函數:

>>> defcau():... pass... >>> now = cau()>>> print(now)None

這個函數的作用就是什麼也不做,當然也就不需要 return。

我們可以特別注意一下那個 return,它其實還有一個作用,請看下面的例子:

>>> defmy_info():... print('my name is rocky')... return... print('i like python')... >>> my_info()my name is rocky

看出什麼了嗎?明明有兩個 print,在中間插入一個 return 以後,只執行了第一個 print,第二個並沒有執行。這是因為在第一個之後遇到 return,它告訴函數要終端函數體內的流程,所以 return 在這裡的作用就是:結束正在執行的流程,並離開函數體返回到調用的位置。

函數的文檔

函數的文檔,一般是寫在函數的名字下面,說明這個函數的用途,因為這個我感覺很重要,之前雖然也說過注釋的重要性,但還是感覺有必要再次說明。

deffibs(n):"""這是一個求斐波那契數列的函數 """

在函數的下面,用三對引號的方式包裹著這個函數文檔,也叫函數的說明。

比如我們用 dir 來查看函數對象,比如 dir(type),我們會看到 __doc__,這個就是文檔:

>>> dir(type)['__abstractmethods__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__flags__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__', '__mro__', '__name__', '__ne__', '__new__', '__prepare__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasscheck__', '__subclasses__', '__subclasshook__', '__text_signature__', '__weakrefoffset__', 'mro']>>> type.__doc__"type(object_or_name, bases, dict)\ntype(object) -> the object's type\ntype(name, bases, dict) -> a new type"

如果上面的例子在交互模式下的話,用 help(fibs),得到的也是三對引號所包裹的文檔信息,感興趣的可以嘗試一下。

函數的屬性

任何對象都具有屬性,我們前面的文章說過函數是對象,那麼函數也有屬性。

>>> defcau():... """this is a cau function"""... pass...

對於上面的函數,最熟悉的屬性應該就是上面提到的函數文檔 __doc__,它可以用英文句號的方式表示為 cau.__doc__:

>>> cau.__doc__'this is a cau function'

這就能體現出這種方式表示函數屬性的優勢,只要對象不同,不管你屬性的名字是否相同,用英文句號都可以說明屬性所對應的對象。

我們還可以給對象增加屬性,比如我們給 cau 增加一個 pig 屬性,並設置為 100,順便我們再調用一下它:

>>> cau.pig = 100>>> cau.pig100

還記得上面我說的那個查看對象屬性和方法的 dir 嗎?現在有請它閃亮登場:

>>> dir(cau)['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'pig']

在這裡列出了所有 cau 這個函數對象的屬性和方法,仔細觀察我們會發現,我們剛用過的 __doc__ 和我們新增加的 pig 都在其中,至於你在糾結那些名字前後都是用雙下劃線的,你暫且可以把它們稱之為特殊屬性,所有的這些屬性都是可以用英文句點的方式調用,感興趣的可以試一試。

寫在之後

本來在這裡想把參數和變量一起說了,但是基於現在的篇幅長度和參數變量那涉及的東西,一起寫的話顯得太長了。其實在我的認知裡,從公眾號上學知識其實不是最好的方式,因為代碼什麼的看起來不舒服,所以文章的內容在你有限的耐心時間段裡看能達到相比來所比較好的效果。

最近比較忙,我現在還在堅持著每天更新,我儘量擠出時間來寫文章,可能不能做的那麼盡善盡美,希望朋友們能理解。

最後感謝你能看到這裡,希望我寫的東西能夠讓你有到收穫,每天收穫一點點,持之以恆,水能穿石。

The end。

看我這麼賣力還不專注一波

相關焦點

  • 零基礎學習Python開發可以嗎
    很多小夥伴諮詢問我「零基礎可以學習Python開發嗎,能學會嗎?」  3.下載了Python版本之後,就可以開始學習語法了,首先要掌握python中的關鍵字語法,函數語法,數學表達式等。  4.在大致掌握了Python的常用語法之後,就可以嘗試學習常用模塊的使用了,比如os,os.path,sys,string模塊等,在交互模塊使用中,進一步熟悉Python的函數語法。
  • 零基礎學習 Python 之條件語句
    寫在之前大家好,這裡是零基礎學習 Python 系列,在這裡我將從最基本的Python 寫起,然後再慢慢涉及到高階以及具體應用方面。我是完全自學的 Python,所以很是明白自學對於一個人的考驗,所以在這裡我會盡我最大的努力,把 Python 儘可能簡單的表述清楚,讓更多想要學習 Python 的朋友能夠入門。
  • 零基礎學習 Python 之 for 循環語句
    寫在之前大家好,這裡是零基礎學習 Python 系列,在這裡我將從最基本的Python 寫起,然後再慢慢涉及到高階以及具體應用方面。我是完全自學的 Python,所以很是明白自學對於一個人的考驗,所以在這裡我會盡我最大的努力,把 Python 儘可能簡單的表述清楚,讓更多想要學習 Python 的朋友能夠入門。
  • 零基礎學習 Python 之封裝
    私有化就是將類或者函數中的某些屬性限制在某個區域內,從而讓外部無法調用。Python 中私有化的方法相對來說也比較簡單,就是在準備私有化的屬性或方法名字前面加上雙下滑線。我們來看下面的例子:classSample:def__init__(self):self.my_name = 'rocky'self.
  • 零基礎如何學習python
    Python近幾年慢慢火起來的程式語言,因為人工智慧的到來,使得Python逐漸火爆,讓人想要學習Python,從事Python開發。雖然說Python比起其他幾大程式語言易學,但是零基礎沒有合理的學習路線學起來也會有些難度的。
  • 程式設計師大神分享零基礎如何30天入門快速學習python
    零基礎如何30天入門快速學python?一:明確自己的學習目標不管我們學習什麼樣的知識,都要對自己的學習目標有一個明確的認識。只有這樣才能朝著目標持續的前進,少走彎路,從而在學習的過程中得到提升,享受整個學習的樂趣。
  • 零基礎學習python,這幾本書少不了
    目前,社會上已經掀起了一波學習python的熱潮,但是很多人由於並沒有python基礎,不知道從哪裡開始學習,小編今天整理了零基礎學習python的一些書籍,希望對大家有所幫助。1.《"笨辦法"學Python》推薦理由:本書是一本python入門書籍,比較適合沒有計算機、編程基礎,但是對python感興趣的小白學習使用。這本書是以習題的方式一步一步引導讀者了解、學習python,從簡單的列印一直講到完整項目的實踐,讓初學者從基礎的python知識入手,最終體驗到軟體開發的基本過程。
  • 零基礎學習 Python 之前期準備
    寫在之前從今天開始,我將開始新的篇章 -- 零基礎學習 Python,在這裡我將從最基本的 Python 寫起,然後再慢慢涉及到高階以及具體應用方面。我是完全自學的 Python,所以很是明白自學對於一個人的考驗,所以在這裡我會盡我最大的努力,把 Python 儘可能簡單的表述清楚,讓更多想要學習 Python 的朋友能夠入門。
  • 柳小白Python學習筆記 8 函數(function)之內置函數
    函數是組織好的,可重複使用的,用來實現單一或相關聯功能的代碼段。python提供了很多內置函數,當然我們也可以自定義函數。今天主要學習一些內置函數的用法。python裡內置了很多函數,這些函數可以直接調用。
  • 七夕福利 | 免費領取10G Python零基礎學習大禮包
    全套Python零基礎視頻課程+電子教材,小白免費領取(資料的領取方式很簡單,在文章末尾就可以看到)在眾多的程式語言之中,更適合於零基礎的同學學習,除了容易上手之外,Python還有著以下優點:效率高,代碼更易閱讀、調試和擴展用途廣泛:遊戲、Web 應用解決商業問題以及供各類公司開發內部工具
  • Python零基礎入門教程,如何使用lambda、filter和map函數?
    大綱函數類型定義及特性lambda函數定義及使用filter函數定義及使用map函數定義及使用引入函數類型概念函數類型定義:python中任意一個函數都有數據類型,這種數據類型是function(函數類型)
  • python函數應用,用python函數列印圖形和數學運算
    python函數在實際開發中是需要經常應用到的,對代碼進行封裝成功能模塊,而python函數應用有哪些呢?下面羽憶教程為你介紹用python函數列印圖形和數學運算。python函數應用python函數應用下面小編會用兩個簡單python函數列印橫線以及python函數求和以及平均值的例子為你展示python
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 零基礎學習人工智慧合適嗎
    現在網際網路巨頭,都已經轉投到人工智慧領域,而人工智慧最好的程式語言就是python,未來前景顯而易見。黑馬程式設計師的PYthon是國內最早開設的真正人工智慧課程,那麼零基礎學習人工智慧合適嗎?以下是人工智慧基礎知識。
  • 零基礎學習python,這幾本書必不可少,你擁有幾本呢
    python是世界上最強大、最受歡迎的程式語言之一,即使不是程式設計師,我們平時在工作中也會經常用到,例如用python分析競品數據,做財務報表等等。目前,社會掀起了一波學習python的熱潮,但是很多人由於並沒有python基礎,不知道從哪裡開始學習,今天整理了零基礎學習python的一些書籍,希望對大家有所幫助。
  • python初學者必看的學習路線 Python是近幾年比較火的程式語言
    Python是近幾年比較火的程式語言之一,因為人工智慧的火爆,讓很多人都想從事python開發。很多零基礎學員在學習python的時候都會走一些彎路,下面小編就為大家分享python學習路線圖,幫助零基礎學員在學習的時候少走彎路。 很多人都在問Python學習步驟應該如何安排?
  • Python零基礎學習記錄
    最近下決心學習python,將學習過程中的基礎內容記錄下來,便於以後自己複習。002 and語句判斷 這部分有兩個知識點: 1.格式化輸出:int表示數據類型為整型數據,input()為輸入函數這裡小編是一個有著5年工作經驗的Python工程師,關於Python有一個完整學習
  • 零基礎如何學Python?小白學Python需要多久?
    那如果是零基礎又該如何學Python呢?小白學Python需要多久呢?下面,小編就與大家來看一下!零基礎的新手應該如何系統化的學習Python開發第一、必須有一個老師給自己講解,帶著學習這樣首先是可以少走很多的彎路,不至於一個小小的問題,就困擾了一天的時間,可能明白人的一句話你就明白,但是自己想可能需要一天的時間,或許最後還是搞不懂。
  • 零基礎學習python GUI編程(PyQt)系列之3:初識GUI代碼
    前面我們介紹了python界面編程的軟體安裝以及配置,在學完前面兩節之後,我們就可以著手進行界面設計和代碼編寫了,本節開始我們就來逐步解開python界面編程的神秘面紗!MainWindow示例添加完成後將其保存為以.ui為後綴的文件(改文件另存到你建立的項目中,如果直接保存的話,是保存到了PyQt5_Tools的路徑裡面去了,和designer在同一目錄),我這裡將其保存在當前應用的一個項目中
  • Python學習不用愁,400集教程無償全部奉上,從零開始
    Python是近幾年比較火的程式語言之一,因為人工智慧的火爆,讓很多人都想從事python開發。很多零基礎學員在學習python的時候都會走一些彎路,下面小編就為大家分享python學習路線圖,幫助零基礎學員在學習的時候少走彎路。