天天看點

函數相關内容

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、面向過程程式設計與函數式程式設計

- 面向過程:機械師思維,流水線式程式設計

- 函數式程式設計:壘代碼