由于函數(shù)是對象,所以函數(shù)比我們所預料的更靈活。例如,一旦我們創(chuàng)建一個函數(shù),可以像往常一樣調(diào)用它:
>>>def func(a):
... b = 'spam'
... return b * a
...
>>>func(8)
'spamspamspamspamspamspamspamspam'
我們也可以通用地檢查它們的屬性(如下代碼在Python 3.0中運行,但是Python 2.6中的結(jié)果是類似的):
>>>func.__name__
'func'
>>>dir(func)
['__annotations__','__call__','__class__','__closure__','__code__',
...more omitted...
'__repr__','__setattr__','__sizeof__','__str__','__subclasshook__']
其中一些屬性還提供了函數(shù)的本地變量和參數(shù)等方面的細節(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
工具編寫者可以利用這些信息來管理函數(shù)。
函數(shù)對象不僅限于前面列出的系統(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']
這樣的屬性可以用來直接把狀態(tài)信息附加到函數(shù)對象,而不必使用全局、非本地和類等其他技術(shù)。和非本地不同,這樣的屬性可以在函數(shù)自身的任何地方訪問。從某種意義上講,這也是模擬其他語言中的“靜態(tài)本地變量”的一種方式——這種變量的名稱對于一個函數(shù)來說是本地的,但是,其值在函數(shù)退出后仍然保留。
-
編程語言
+關(guān)注
關(guān)注
10文章
1950瀏覽量
34988 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62977 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
85040
發(fā)布評論請先 登錄
相關(guān)推薦
評論