標籤:

跟黃哥學python之函數是第一類對象

首先請看維基百科定義:

第一類對象(英語:First-class object)在計算機科學中指可以在執行期創造並作為參數傳遞給其他函數或存入一個變數的實體。將一個實體變為第一類對象的過程叫做「物件化」(Reification)。nn「第一類對象」這一名稱最早由Christopher Strachey在1960年代發明,原稱「第一類公民」(First-class citizen),意指函數可作為電腦語言中的第一類公民。英文中也稱「First-class entity」或「First-class value」。n

黃哥從以下幾個方法說明python函數是第一類對象這個特性:

1、函數名字是對函數的引用。python中所有都是對象,函數名字是函數對象的引用。

>>> def foo():n... print "in foo"n...n>>> foon<function foo at 0x1018f7668>n

2、函數最為第一類對象可以賦值給其它變數。

>>> def foo():n... print "in foo"n...n>>> foon<function foo at 0x1018f7668>n>>> f = foon>>> foo()nin foon>>> f()nin foon>>> id(f), id(foo)n(4321146472, 4321146472)n>>> fn<function foo at 0x1018f7668>nnfoo 賦值f,那麼f和foo是對同一個函數的引用。從id(f),id(foo)相同,就可以看出。n

3、函數作為第一類對象,可以作為參數傳遞。

#! /usr/bin/pythonn# coding:utf-8nnndef f(*args, **kwargs):n if args:n for item in args:n print(item)n if kwargs:n for key in kwargs:n print(key, kwargs[key])nnndef foo(func, *args, **kwargs):n func(*args, **kwargs)nnnif __name__ == __main__:n t1 = (2, 3, 4, 5)n d1 = {1:python, 2:php, 3:golang}n foo(f, *t1, **d1)nn# 2n# 3n# 4n# 5n# (1, python)n# (3, golang)n# (2, php)n

4、函數作為第一類對象,可以作為函數的返回值。

#! /usr/bin/pythonn# coding:utf-8nnndef foo(x):n 演示代碼 由黃哥所寫n def inner(y):n return x + yn return innernnnif __name__ == __main__:n p = foo(3)n print(p(5))n

推薦閱讀:

TAG:Python |