【问题标题】:Is a Python function stored as an object? [closed]Python 函数是否存储为对象? [关闭]
【发布时间】:2014-03-28 06:44:09
【问题描述】:

此查询与link 接续,以进一步了解这一点:

在函数的情况下,您有一个具有某些字段的对象, 其中包含 e。 G。字节码方面的代码,数量 它具有的参数等。

我的问题:

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

2) 我如何可视化表示为对象的高阶函数?

3) 我如何将模块可视化为一个对象?说“导入运算符”

4) '+' '>' '!=' '==' '=' 等运算符是否也映射到某些对象方法?比如对于 expr 'check = 2

【问题讨论】:

  • glglgl -- 根据要求提出单独的查询
  • 我假设您正在尝试从其他问题继续。 Stack Overflow 上的每个问题都应该是自包含的。您应该使这个问题清晰易懂,而无需访问任何链接。就目前而言,很难说出您的实际问题是什么。
  • 我们在 python 中处理的所有内容都是object
  • @Sham 您未能准确解释不清楚的地方。我也认为这完全是你要问的……
  • @g.d.d.c 我现在修改了查询,你能重新打开这个问题吗?

标签: python


【解决方案1】:

这就是说,在 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 生成的。)

【讨论】:

  • >>> import sys >>> print(sys.version) 3.2.3 (default, Apr 11 2012, 07:12:16) [MSC v.1500 64 bit (AMD64)] > >> def doNothing():pass >>> doNothing.func_name Traceback(最近一次调用最后):文件“”,第 1 行,在 doNothing.func_name AttributeError: 'function' object has no attribute 'func_name' >>> doNothing.func_code Traceback(最近一次调用最后):文件“”,第 1 行,在 doNothing.func_code AttributeError:'function' 对象没有属性 'func_code'跨度>
  • @Sham:在 Python 3 上,您需要使用 __name____code__ 而不是 func_namefunc_code
  • @Sham 您已经看到dir(doNothing) 向您展示了您拥有的属性。您正在寻找的那些看起来像这些的可能是您真正想要的。例如,您查找 func_code,因为它在 2.x 上被命名,您在 3.x 上看到 __code__ --> 您找到了您想要的东西。
  • @glglgl 如果是高阶函数,我需要查看哪些属性才能知道传入的函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多