天天看點

Python學習手冊 - 09

函數是在程式設計中 剪剪貼貼的代替。

有函數以後,才有全局作用域的麻煩。

def 是可執行的代碼, 在運作這個之前,函數并不存在。

函數也是對象-函數對象,def建立一個函數對象,并複制給你定義的函數名字。

def這個語句是實時執行的, 建立函數對象,指派給函數名

在子產品導入的時候,會執行一遍子產品中的代碼。

依賴類型的行為稱為多态。

函數是多态的。

作用域就是 命名空間

變量被指派的地點,綁定一個特定的命名空間。

全局作用域僅限單個檔案。

函數内部可以引用全局變量,前提是函數内部沒有相同名稱的變量。

内置變量會被最後搜尋的, 是以你可以使用内置變量,而不需要導入 ​

​__builtin__​

​ 子產品

全局變量不經過聲明也可以在函數内部引用

但如果要在函數内部改變全局變量的話,必須要global聲明。

名字查找規則:本地作用域,上一層的本地作用域,全局作用域,内置作用域。

函數也可以聲明 全局作用域

包閉,在函數内,定義函數 。 或者叫 工廠函數 ,能夠在動态的改變函數。

定義​

​__call__​

​ 方法後,變量可以像函數一樣被使用。

函數的參數

1,普通的位置确定的參數

2,關鍵字的參數

3,參數預設值

4,* 和** 任意參數

這有個醜陋的例子

def f(*arg):
    print arg 


f(1,2,3,4)


def f2(**arg):
    print arg 


f2(a=2,b=3,c=4)      

還有另一種叫 解包參數,這像是一種偷懶的參數傳遞方法。

函數對象: 屬性和注解

函數是一個對象,就像字元串或者數字那樣

函數可以附加任意的使用者定義的屬性。

lambda 是一種函數速寫

map 序列中的映射函數

filter 生成一個 符合條件的新的清單

reduce 将一個清單中的每個元素,都按照某種方式,應用于一個函數,最後得到一個結果。

清單解析: 要實作一個功能,有很多的方法。清單解析就是一個。

生成器函數: 包含yield的def函數,支援疊代協定。