我希望在另一个代码块的每一行之后运行一段代码.例如,希望能够在执行函数的下一行之前或之后评估全局变量.
例如,下面我尝试在foo()函数的每一行之前打印'hello' .我认为装饰者可以帮助我,但它需要一些内省功能,以便编辑我的foo()功能的每一行,并在它之前或之后添加我想要的东西.
我正在尝试执行以下操作:
>>> def foo():
... print 'bar'
... print 'barbar'
... print 'barbarbar'
>>> foo()
hello
bar
hello
barbar
hello
barbarbar
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?将在__code__对象帮助吗?我需要同时进行装饰和内省吗?
编辑:这是此线程的另一个目标示例:
>>> def foo():
... for i in range(0,3):
... print 'bar'
>>> foo()
hello
bar
hello
bar
hello
bar
Run Code Online (Sandbox Code Playgroud)
在这个新案例中,在打印每个"条形图"之前,我想打印一个"你好".
这样做的主要目的是能够在执行下一行代码之前执行另一个函数或测试任何类型的全局变量.想象一下,如果是全局变量True,则代码转到下一行; 而如果全局变量是False,则它会停止函数执行.
编辑:在某种程度上,我正在寻找一种工具,以在另一个代码块中注入代码.
编辑:谢谢unutbu我已经实现了这个代码:
import sys
import time
import threading
class SetTrace(object):
"""
with SetTrace(monitor):
"""
def __init__(self, func):
self.func = func
def __enter__(self): …Run Code Online (Sandbox Code Playgroud)