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

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

  • getA () и getB () не видны
  • scapy, который был в импорте, не виден ни

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

2 Solutions collect form web for “видимость кода и видимость / определения”

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

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

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

Вы смешиваете 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} 
Python - лучший язык программирования в мире.