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

我不太明白在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 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())