17

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も表示されません

なぜこれが起こるのですか?私は何を間違えていますか?

4

2 に答える 2

27

上記のコメントで書いたように、解決策は次のとおりです。

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

ここで撮影)

于 2013-02-21T15:44:38.637 に答える
8

あなたは混乱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}
于 2013-01-16T21:47:13.063 に答える