小编Aks*_*rit的帖子

为什么函数(Python)的__code__是可变的

在昨天的一个问题中,在评论中,我开始知道在python __code__函数中的atrribute是可变的.因此我可以编写如下代码

def foo():
    print "Hello"

def foo2():
    print "Hello 2"

foo()
foo.__code__ = foo2.__code__
foo()
Run Code Online (Sandbox Code Playgroud)

产量

Hello
Hello 2
Run Code Online (Sandbox Code Playgroud)

我试过谷歌搜索,但要么因为没有信息(我非常怀疑这一点),或者关键字(__code__)不容易搜索,我找不到一个用例.

它似乎不是"因为Python中的大多数东西都是可变的"也是一个合理的答案,因为函数的其他属性 - __closure____globals__- 是显式只读的(来自Objects/funcobject.c):

static PyMemberDef func_memberlist[] = {
    {"__closure__",   T_OBJECT,     OFF(func_closure),
     RESTRICTED|READONLY},
    {"__doc__",       T_OBJECT,     OFF(func_doc), PY_WRITE_RESTRICTED},
    {"__globals__",   T_OBJECT,     OFF(func_globals),
     RESTRICTED|READONLY},
    {"__module__",    T_OBJECT,     OFF(func_module), PY_WRITE_RESTRICTED},
    {NULL}  /* Sentinel */
};
Run Code Online (Sandbox Code Playgroud)

为什么__code__在其他属性为只读时可写?

python internals python-internals

16
推荐指数
1
解决办法
1478
查看次数

标签 统计

internals ×1

python ×1

python-internals ×1