Python函数是否存储为对象?

时间:2014-03-28 06:44:09

标签: python

此查询继续link以进一步了解这一点:

  

对于函数,你有一个具有某些字段的对象,   其中包含e。 G。代码就字节码而言,数量   它有的参数等等。

我的问题:

1)我如何想象一个被表示为对象的函数?(NPE在这里回答了这个问题)

2)如何将高阶函数可视化为对象?

3)如何将模块表示为对象?说'导入运营商'

4)运营商是否像' +' '>' '!=' ' ==' ' ='还映射到一些对象方法?比如表示' check = 2< 3',这是否内部调用类型(2)或类型(3)的某种方法来评估'<'操作

1 个答案:

答案 0 :(得分: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生成的。)