Я, очевидно, работаю из-за плохого понимания возможностей Python. Возможно, вы можете помочь.
Справочная информация:
Я использую
if __name__ == "__main__"
конструкция для выполнения "самопроверки" в моих модулях. Каждый самопроверка вызывает различные публичные методы и выводит их результаты для визуальной проверки по мере разработки модулей.
Чтобы сделать вещи «чистыми» и управляемыми, я создал небольшой метод для упрощения тестирования вызовов методов:
def pprint_vars(var_in):
print("%s = '%s'" % (var_in, eval(var_in)))
Когда
foo = "bar"
Вызов pprint_vars с помощью:
pprint_vars('foo')
печать:
foo = 'bar'
Все хорошо и хорошо.
Постановка задачи:
Не в восторге от просто KISS, у меня хватило ума переместить мой удобный метод 'pprint_vars' в отдельный файл с именем 'debug_tools.py' и просто импортировать 'debug_tools' всякий раз, когда я хотел получить доступ к 'pprint_vars'.
Здесь все разваливается. Я ожидал бы
import debug_tools
foo = bar
debug_tools.pprint_vars('foo')
для продолжения работы над магией и печати:
foo = 'bar'
Вместо этого он приветствует меня:
NameError: name 'some_var' is not defined
Иррациональное убеждение:
Я полагал (по-видимому, ошибочно), что импорт помещает импортированные методы (более или менее) «в линию» вместе с кодом, и, таким образом, правила области видимости переменной останутся такими же, как если бы метод был определен как встроенный.
Мольба о помощи:
Может кто-нибудь исправить мои (неправильные) представления об объемах импорта?
Спасибо,
JS