- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在探索 __code__
属性和 ast
模块,发现奇怪的行为,函数的第一次调用不会输出任何内容:
In [3]: def foo():
...: print('foo')
...:
In [4]: p = ast.parse("".join(inspect.getsourcelines(foo)[0]))
In [5]: p.body[0].body = ast.parse("print('bar')").body
In [6]: foo.__code__ = compile(p, foo.__code__.co_filename, 'exec')
In [7]: foo() # Nothing happens??
In [8]: foo() # Okay, let's try again
bar
这里发生了什么?
最佳答案
您可能认为您已将 foo.__code__
设置为打印 bar
的代码对象,但这不是您所做的。您已将 foo.__code__
设置为一个代码对象,该对象定义了一个用于打印 bar
的新 foo
函数。有点像
def foo():
global foo
def foo():
print('bar')
第一次运行后,foo
是新的条形打印函数,运行新函数会打印bar
。
关于python - 如何修补函数的 __code__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46675651/
我正在编写一个小型应用程序,它接受用户的输入,为他们提供一组可供使用的最佳参数。 (每一组都有排名,用户可以选择他们想要使用的一组) 为了能够做到这一点,我从一组选择中选择一个函数(取决于上下文),使
我正在探索 __code__ 属性和 ast 模块,发现奇怪的行为,函数的第一次调用不会输出任何内容: In [3]: def foo(): ...: print('foo') .
以下作品: def spam(): print "spam" exec(spam.__code__) spam 但是如果 spam 接受参数怎么办? def spam(eggs): p
我预计以下结果会导致 y 成为自由变量: def f(x): return x + y 但是,f.__code__.co_freevars 等于 (),f.__code__.co_varnam
我正在研究缓存系统。这个想法是它可以检测创建缓存对象的函数自其初始创建以来是否已更改,从而使缓存文件无效。 我偶然发现了 python 的 function.__code__属性,即已编译函数的字节码
在昨天的前一个问题中,在评论中,我了解到在 python __code__ 中函数的属性是可变的。因此我可以编写如下代码 def foo(): print "Hello" def foo2()
我想以静态方式获取函数的 co_firSTLineno,展开的函数是可以的,但是如果一个方法被包装了,我只能得到包装函数所在的lineno。 md.py import functools def ru
我是一名优秀的程序员,十分优秀!