Python 代码.交互和导入/定义可见性
我不太明白在python模块中,导入和函数定义在哪里是可查看的。 以下是我的案例的简化:Python 代码.交互和导入/定义可见性,python,function,scope,visibility,python-import,Python,Function,Scope,Visibility,Python Import,我不太明白在python模块中,导入和函数定义在哪里是可查看的。 以下是我的案例的简化: from scapy.all import * def getA(): return 0 def getB(): return getA() + 1 def getC(): code.interact(local=locals()) return 3 def main(): print getA() print getB() print ge
from scapy.all import *
def getA():
return 0
def getB():
return getA() + 1
def getC():
code.interact(local=locals())
return 3
def main():
print getA()
print getB()
print getC()
exit()
if __name__ == '__main__':
main()
现在,一切都很顺利,直到我到达函数getC
并出现一个命令提示符,我应该看到的中有很多丢失了
- getA()和getB()不可见
- 进口中的scapy也不可见
locals()
只列出在函数本身中定义的名称
改用globals()
>>> bar = 'baz'
>>> def foo():
... spam ='eggs'
... print locals()
...
>>> foo()
{'spam': 'eggs'}
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'foo': <function foo at 0x108a027d0>, '__doc__': None, '__package__': None}
>bar='baz'
>>>def foo():
... 垃圾蛋
... 打印本地文件()
...
>>>foo()
{'spam':'egs'}
>>>globals()
{uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
正如我在上面的评论中所写,解决方案是:
code.interact(local=dict(globals(), **locals()))
(拍摄)哦,好的。我的目的是打开一个命令提示符来检查变量的值,并可能手动继续。到目前为止,我只有一个大脚本,所以我想这就是
locals()
起作用的原因。谢谢嗯,如果我做了code.interact(local=globals())
所有的本地定义都会丢失。有什么方法可以做到我在上面的评论中提到的吗?好的,找到了:code.interact(local=dict(globals(),**locals())