2014-03-28 59 views
3

該查詢與link延續,進一步瞭解了這一點:Python函數是否存儲爲對象?

In the case of functions, you have an object which has certain fields, which contain e. g. the code in terms of bytecode, the number of parameters it has, etc.

我的問題:

1)如何我想象被表示爲一個對象(NPE在這裏回答了這個問題的功能? )

2)怎樣被可視化表示爲對象的高階函數?

3)如何我預想模塊被表示爲對象?說「進口經營者在」

4)是否像「+」「>」「!=」「==」「=」也被映射到某一對象的方法運營商?說expr的「檢查= 2 < 3」,這是否內部調用類型(2)或式(3)來評價「<」運算符的一些方法?

+0

glglgl - 按要求 – overexchange

+3

我假設你想從其他一些問題繼續單獨查詢升高。堆棧溢出的每個問題應該是自包含的。您無需訪問任何鏈接即可使這個問題清晰易懂。按照現狀,很難說出你的實際問題是什麼。 –

+0

我們在python中處理的所有東西都是'object'。 – fledgling

回答

6

所有這一切,說的是,在Python,功能就像任何其他對象。

例如:

In [5]: def f(): pass 

現在ffunction類型的對象:

In [6]: type(f) 
Out[6]: function 

如果更仔細地檢查,它包含字段的一大堆:

In [7]: dir(f) 
Out[7]: 
['__call__', 
... 
'func_closure', 
'func_code', 
'func_defaults', 
'func_dict', 
'func_doc', 
'func_globals', 
'func_name'] 

要選擇一個實例中,f.func_name是該函數的名稱:

In [8]: f.func_name 
Out[8]: 'f' 

f.func_code包含的代碼:

In [9]: f.func_code 
Out[9]: <code object f at 0x11b5ad0, file "<ipython-input-5-87d1450e1c01>", line 1> 

如果你真的很好奇,您可以向下進一步深入:

In [10]: dir(f.func_code) 
Out[10]: 
['__class__', 
... 
'co_argcount', 
'co_cellvars', 
'co_code', 
'co_consts', 
'co_filename', 
'co_firstlineno', 
'co_flags', 
'co_freevars', 
'co_lnotab', 
'co_name', 
'co_names', 
'co_nlocals', 
'co_stacksize', 
'co_varnames'] 

等。

(以上輸出是用Python 2.7.3生產。)

+0

>>> import sys >>> print(sys.version) 3.2.3(默認,2012年4月11日,07:12:16)[MSC v.1500 64 bit(AMD64)] >>> def doNothing ():pass >>> doNothing。FUNC_NAME 回溯(最近通話最後一個): 文件 「」,1號線,在 doNothing.func_name AttributeError的: '功能' 對象有沒有屬性 'FUNC_NAME' >>> doNothing.func_code 回溯(最近最後調用): 文件 「」,1號線,在 doNothing.func_code AttributeError的: '功能' 對象有沒有屬性 'func_code' – overexchange

+6

@Sham:在Python 3中,你要使用'__name__'和'__code__'而不是'func_name'和'func_code'。 – user2357112

+0

@Sham你已經看到'dir(doNothing)'顯示你有什麼屬性。看起來像這些你正在尋找的那些可能是你真正想要的。例如,當你在2.x上找到'func_code'時,你會在3.x上看到一個'__code__' - 你找到了你想要的東西。 – glglgl

相關問題