由于函數(shù)是對(duì)象,所以函數(shù)比我們所預(yù)料的更靈活。例如,一旦我們創(chuàng)建一個(gè)函數(shù),可以像往常一樣調(diào)用它:
>>>def func(a):
... b = 'spam'
... return b * a
...
>>>func(8)
'spamspamspamspamspamspamspamspam'
我們也可以通用地檢查它們的屬性(如下代碼在Python 3.0中運(yùn)行,但是Python 2.6中的結(jié)果是類似的):
>>>func.__name__
'func'
>>>dir(func)
['__annotations__','__call__','__class__','__closure__','__code__',
...more omitted...
'__repr__','__setattr__','__sizeof__','__str__','__subclasshook__']
其中一些屬性還提供了函數(shù)的本地變量和參數(shù)等方面的細(xì)節(jié):
>>>func.__code__
>>>dir(func.__code__)
['__class__','__delattr__','__doc__','__eq__','__format__','__ge__',
...more omitted...
'co_argcount','co_cellvars','co_code','co_consts','co_filename',
'co_firstlineno','co_flags','co_freevars','co_kwonlyargcount','co_lnotab',
'co_name','co_names','co_nlocals','co_stacksize','co_varnames']
>>>func.__code__.co_varnames
('a','b')
>>>func.__code__.co_argcount
1
工具編寫(xiě)者可以利用這些信息來(lái)管理函數(shù)。
函數(shù)對(duì)象不僅限于前面列出的系統(tǒng)定義的屬性。我們也可以向函數(shù)附加任意的用戶定義的屬性:
>>>func
>>>func.count = 0
>>>func.count += 1
>>>func.count
1
>>>func.handles = 'Button-Press'
>>>func.handles
'Button-Press'
>>>dir(func)
['__annotations__','__call__','__class__','__closure__','__code__',...more omitted...
__str__','__subclasshook__','count','handles']
這樣的屬性可以用來(lái)直接把狀態(tài)信息附加到函數(shù)對(duì)象,而不必使用全局、非本地和類等其他技術(shù)。和非本地不同,這樣的屬性可以在函數(shù)自身的任何地方訪問(wèn)。從某種意義上講,這也是模擬其他語(yǔ)言中的“靜態(tài)本地變量”的一種方式——這種變量的名稱對(duì)于一個(gè)函數(shù)來(lái)說(shuō)是本地的,但是,其值在函數(shù)退出后仍然保留。
-
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1956瀏覽量
36634 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4380瀏覽量
64844 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86708
發(fā)布評(píng)論請(qǐng)先 登錄
深度學(xué)習(xí)入門(mén)之基于python的理論與實(shí)現(xiàn)
Python入門(mén)之36常用第三方模塊獲取系統(tǒng)信息psutil
Python機(jī)器學(xué)習(xí)入門(mén)之pandas的使用提示
python類的多態(tài)和類的property屬性
python基礎(chǔ)教程實(shí)例之python基礎(chǔ)入門(mén)100例程序分享
C語(yǔ)言入門(mén)教學(xué)之函數(shù)資料總結(jié)免費(fèi)下載
python入門(mén)書(shū)籍推薦
華為開(kāi)發(fā)者HarmonyOS零基礎(chǔ)入門(mén):屬性函數(shù)布局變量

評(píng)論