我正在尝试构建一段代码,用于打印出在控制台上写入的内容,但仍会执行任何人在其上写入的内容。例如:
我有这个功能:
def create_set():
return []
每当有人在控制台中输入c = create_set()
时。我希望程序创建集合并打印出字符串"c = create_set()"
我该怎么做?一些帮助会有很大的帮助
答案 0 :(得分:0)
您可以编写一个装饰器来执行此操作,但您必须将其添加到每个手的每个方法中,或者在模块__dict__
中执行一些魔术(我不建议这样做)。这在python 3.6中有效(我测试过),如果你使用它在python 2.7中运行的注释版本。他们将stack
- 签名从2.X更改为3.X。
from inspect import stack
from functools import wraps
def printer(f):
@wraps(f)
def wrapped(*args, **kwargs):
call_info = stack()[1].code_context # In Python 2.7.X, replace with stack()[1][4]
# Use index 1 because 0 is always this wrapper function
for context in call_info:
print(context.strip())
return f(*args, **kwargs)
return wrapped
像这样使用:
@printer
def test():
return 5
x = test()
这会将x = test()
打印到stdout。如果你想要这个用于调试,那就完全没问题了,但是如果这是你的代码在生产中所依赖的东西我就不推荐它,因为它会扼杀你的性能,例如参见here。