我的问题是,如何在导入的模块中执行函数期间检查是否创建了局部变量。
例如,我想从chk_local()函数检测创建变量“ c”的时刻:
# module1
def test():
print "hi"
print "hi1"
print "hi2"
c=250
print "hi3"
print "hi4"
print "hi5"
# main
import threading
import module1 as m1
def chk_local():
while 1:
if 'c' in m1.locals(): # does not work
break
print "local not detected..."
m1_thread = threading.Thread(target = m1.test)
chk_thread = threading.Thread(target = chk_local)
chk_thread.start()
m1_thread.start()
chk_thread.join()
print "done"
答案 0 :(得分:0)
首先,locals()
函数确实从您当前的本地范围返回变量(如名称所示)。但是,为了解决您的问题,c
在您的test
函数范围内。 AFAIK,除非您在全局范围的每个本地范围末端内填充locals()
的内容,否则无法使用locals()
函数在运行时动态地动态访问任何嵌套范围。
EDIT1
(但是,您可能会使用python inspect
lib进行检查,因为函数结束时在函数范围内声明的变量将不复存在。)
EDIT2
我突然想到的另一种想法是,线程不具有共享内存,除非您将其分配给它们,这会使预期的检查更加困难,如您所见in this blog post。
答案 1 :(得分:-1)
您可以简单地测试是否要通过chk_local()函数检测创建变量“ c”的时刻:
这应该是您的#模块1
#module1
def test():
print "hi"
print "hi1"
print "hi2"
c=250
print "hi3"
print "hi4"
print c
这应该是您的#个主文件
import threading
import module1 as m1
def chk_local():
m1.test()
m1_thread = threading.Thread(target = m1.test)
chk_thread = threading.Thread(target = chk_local)
chk_thread.start()
m1_thread.start()
chk_thread.join()
print "done"
O / P将为:
hi
hi1
hi2
hi3
hi4
250
hi
hi1
hi2
hi3
hi4
250
done
您可以检查是否已分配c值。