1、什麼是函數
- 函數就是一個代碼塊
2、為什麼要用函數(定義函數)
- 為了實作代碼的重用性
- 函數即變量,必須先定義,後飲用
3、函數的分類:
内置函數:如:print,list,tuple,dict等python内置好的函數,在python内部任何地方都可以調用
自定義函數:假如内置函數不能滿足我們對于某些功能的需求,就需要自定義一些函數
4、如何定義函數
定義函數都幹了什麼事?
- 隻檢測文法,不執行代碼
文法 def func():pass def 關鍵字,func函數名,() :
定義有參函數,以及有參函數的應用場景
def func(name):pass - 根據外部傳進來的資料進行邏輯判斷
定義無參函數,以及無參函數的應用場景
def func():pass - 僅僅執行一些操作,比如使用者互動,列印等
定義空函數,以及空函數的應用場景
- 設計代碼結構
5、調用函數
如何調用函數
- 先找到名字,然後根據名字調用↓
- 函數名()
函數的傳回值
- 不寫預設傳回None
- return其它(一個值|元組)
函數的傳回值必須有嗎?
- 有:調用函數,經過一系列的操作,最後要拿到一個明确的結果,則必須要有傳回值
- 無:···,不需要得到什麼結果,則不需要有傳回值
函數參數的應用:形參和實參,位置參數,關鍵字參數,預設參數,*arg,**kwargs
函數調用的三種形式:
- 1、語句形式:foo()
- 2、表達式形式:3*len("hello")
- 3、當另一個函數的參數:range(len("hello"))
函數的參數:
- 形參和實參定義
- 形參即變量名,實參即變量值,函數調用将值綁定到名字上,函數調用結束,接觸綁定
注意:
- 預設參數隻在定義的時候指派一次
6、高階函數(函數對象)
- 函數時第一類對象,即函數可以當做資料傳遞
- 可以被引用
- 可以作為傳回值
- 可以當做容器類元素
7、函數嵌套
- 函數裡面的函數
8、作用域與名稱空間
- golbal
- local
- 名稱空間:存放名字的地方,三種名稱空間(x=1,1存放在記憶體,x存放的地方就是名稱空間)
- 加載順序:函數内的名字空間→外部嵌套的函數→全局→内置子產品的名字空間
9、裝飾器
- 閉包函數:内部函數包含對外部作用域而非全局作用域的引用
- 閉包的意義:傳回的函數對象,不僅僅是一個函數對象,在該函數外還包裹了一層作用域
- 應用領域:延遲計算
- 本質(閉包函數),
- 調用方式 (文法)
- @函數名 =====>文法糖
- 為何要用裝飾器
- 開放封閉原則:對修改封閉,對擴充開放
- 在不修改源代碼的前提下增加新功能
10、疊代器、生成器以及協程函數
- 概念:重複的過程稱之為疊代,沒重複一次即一次疊代,本次的疊代結束值是下次的初始值
- 有__iter__方法
- 優點:惰性計算,節省記憶體;缺點:無法擷取長度,隻能往後走
11、三元運算,清單解析,生成器表達式
- 三元運算:result='gt' if 1>3 else 'lt'
print(result) # lt
- 清單解析:[(i*i) for i in range(10)]
- 生成器表達式(用的時候才給);文法與清單推倒式一樣,隻是[] 變為()
- 節省記憶體,一次隻産生一個值
- 應用:讀取大的檔案慢慢讀取,而不是一下子吧記憶體撐爆
12、函數的遞歸調用
- 遞歸和回溯
- 遞歸的效率低
在一個函數内部再次調用這個函數,遞歸函數一定要有結束條件
13、内置函數
- python内部就有的函數
14、面向過程程式設計與函數式程式設計
- 面向過程:機械師思維,流水線式程式設計
- 函數式程式設計:壘代碼