標籤:函數 python 函數式編程
0.說明
無論在什麼程式設計語言中,函數都不可或缺,充分利用函數的特性,可以大大減少我們程式中的代碼量。
1.什麼是函數
所謂函數,英文名為function,其實就是表示為實現一定功能的一段代碼,顯然,如果需要多次實現某一功能時,使用函數就是把重複代碼放入其中,既節省空間的,又有助於保持一致性(主要是修改代碼時)。
(1)函數vs過程
兩者都是可以被調用的實體,過程是簡單、沒有傳回值、特殊的函數。在Python中,過程就是函數,因為解譯器會隱匿地返回預設值None。
(2)傳回值與函數類型
在C語言中,如果定義的一個函數沒有傳回值,則預設返回`void`,並且同時還要在定義函數時聲明函數的類型(即傳回值為void的函數類型)。
在Python中,並不需要定義函數的傳回值類型,函數可以返回不同類型的值,而如果沒有傳回值,則預設返回None:
>>> def hello():... print ‘hello world!‘... >>> res = hello()hello world!>>> res>>> print resNone>>> type(res)<type ‘NoneType‘>
另外需要注意的是,跟C語言一樣,Python也只能返回一個值或對象,但也許你會看到下面這樣的情況:
>>> def foo():... return ‘xpleaf‘, ‘clyyh‘... >>> res = foo()
執行沒有報錯,似乎真的可以返回多個對象!但其實,它真的返回了一個對象:
>>> res(‘xpleaf‘, ‘clyyh‘)>>> type(res)<type ‘tuple‘>
即在上面的函數中,其實是隱式地返回了一個元組,只是看起來像是返回了多個對象而已。顯然,Python的這種特性要比C語言的靈活很多。關於傳回值數量,可總結如下:
| 返回的對象的數目 |
Python實際返回的對象 |
| 0 |
None |
| 1 |
object |
| >1 |
tuple |
2.調用函數
(1)函數操作符
其實就是使用圓括弧來調用一個函數。
(2)關鍵字參數
指的是在調用函數時,可以通過給指定參數傳值,而不需要按照原來函數定義參數的順序來傳值。
定義如下一個函數:
def net_conn(host, port): net_conn_suite
可以有如下調用方式:
# 給參數傳遞值時,必須按照原來參數定義的順序傳遞值net_conn(‘www.xpleaf.com‘, 80)
# 按照順序給參數傳遞值net_conn(host=‘www.xpleaf.com‘, port=80 )# 不按照順序給參數傳遞值net_conn(port=80, host=‘www.xpleaf.com‘)
(3)預設參數
預設參數就是聲明了預設值的參數,因為給參數賦予了預設值,所以在調用函數時,不向該參數傳入值也是允許的,後面會有討論。
(4)參數組
通過一個把元組(非關鍵字參數)或字典(關鍵字參數)作為參數部分傳遞給函數,可以在Python中執行一個沒有顯式定義參數的函數。如下:
func(*tuple_grp_nonkw_args, **dict_trp_kw_args)
當然也可以給出其它形參,包括標準的位置參數(既不是預設參數也不是關鍵字參數,即按照函數定義時參數的位置來給相應的參數傳遞值)和關鍵字參數(函數調用時指定給哪一個參數傳遞值,其實就是所謂關鍵字參數了),函數調用的完整文法如下:
func(positional_args, keyword_args, *tuple_grp_nonkw_args, **dict_grp_kw_args)
本文出自 “香飄葉子” 部落格,轉載請與作者聯絡!
Python回顧與整理9:函數和函數式編程