code.interact和imports / definitions visibility

时间:2013-01-16 21:45:30

标签: 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 getC()
    exit()

if __name__ == '__main__':
    main()

现在,一切顺利,直到我到达功能getC并出现命令提示符,很多我应该看到缺少

  • getA()和getB()不可见
  • scapy,在进口中,既不可见

为什么会这样?我错了什么?

2 个答案:

答案 0 :(得分:19)

正如我在上面的评论中所写,解决方案是:

code.interact(local=dict(globals(), **locals())) 

(采取here

答案 1 :(得分:7)

您感到困惑locals()globals()。在函数范围中,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}