Подтвердить что ты не робот

Видимость кода и видимость/определения

Я не совсем понимаю, где import и определения функций visibile в модуле 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, который был в импорте, не отображается либо

Почему это происходит? Что я ошибаюсь?

4b9b3361

Ответ 1

Как я уже писал в комментарии выше, решение:

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

(взято здесь)

Ответ 2

Вы вводите в заблуждение 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}