1. 程式人生 > >Python學習:函數(function)

Python學習:函數(function)

python

編寫函數

  • def是可執行的代碼。Python函數是有一個新的語句便攜的,即def。不像C這樣的編譯語言,def是一個可執行的語句,函數並不存在,知道Python運行了def後才存在。事實上,if語句、while語句升至是其他的 def中嵌套都是合法的。

  • def創建一個函數對象,並將其賦值給某一變量名。當Python運行到def語句時,將會生成一個新的函數對象並將其賦值給這個函數名。就像所有賦值一樣,函數名變成了某一個函數的引用。函數對象可以賦值給其他的變量名,保存在列表中。函數也可以通過lambda表達式來創建。

  • lambda創建一個對象但將其作為結果返回。這一功能允許我們把函數定義內斂到語法上一條def語句不能工作的地方。屬於高級概念。

  • return將一個結果對象發送給調用者。

  • yield向調用者發揮一個結果對象,但是記住它離開的地方。像生成器這樣的函數也可以通過yield語句來返回值,並掛起它們的狀態以便稍後能夠恢復狀態,屬於高級概念。

  • global聲明了一個模塊級的變量並被賦值。在默認情況下,所有在一個函數中被賦值的對象,是這個函數的本地變量,並且僅在這個函數運行過程中存在。為了分配一個可以在整個模塊中都可以使用的變量名,函數需要在global語句中將它列舉出來。

  • 函數是通過賦值(對象引用)傳遞的。


函數的定義

創建一個新的函數對象,封裝這個函數的代碼,並將這個對象賦值給變量名times。

>>>def times(x,y):
>>>    return x*y
...

函數的調用

>>>x = times(2,4)
>>>x
8

>>>x = times(‘Judy‘, 4)
>>>x
‘JudyJudyJudyJudy‘


Python中的多態

從上面兩個例子中看到,times函數中表達式x*y的意義完全取決於x和y的對象類型,同樣的函數,在一個實例下執行的是乘法,在另一個實例中執行的卻是賦值。Python將對某一對象在某種語法下的合理性交由對象自身判斷。這種依賴類型的行為稱為多態。


例子:尋找序列的交集

def intersect(seq1, seq2):
    res = []
    for x in seq1:
        if x in seq2:
            res.append(x)
    return res

或者用經典的列表解析表達式來替代:

>>>[x for x in seq1 if x in seq2]

這個單個的代碼段可以應用於整個的對象類型範圍。

Python學習:函數(function)