Python: доступ к «областям модуля» vars

В настоящее время я изучаю Python, и мне приходится работать над проектом Python 2.7.

Доступ к переменным «область видимости модуля» в функциях самого модуля немного запутан для меня, и мне не удалось найти удовлетворительный способ.

  • В Python, когда я должен использовать функцию вместо метода?
  • Механизм импорта Python
  • Петли Python против списков понимания против карты для побочных эффектов (т. Е. Не используя возвращаемые значения)
  • Мои попытки:

    Способ 1:

    my_module.py

    my_global_var = None def my_func(): global my_global_var my_global_var = 'something_else' 

    Здесь я думаю, что путающие локальные и «объемные области» могут быть довольно легкими.

    Способ 2:

    my_module.py

     import my_module my_global_var = None def my_func(): my_module.my_global_var = 'something_else' 

    Здесь имя «my_module» не может быть так же легко изменено, как «путь 1», когда это необходимо. Плюс, импорт модуля в себя звучит довольно странно.

    Чтобы вы посоветовали? Или вы предложите что-нибудь еще? Благодарю.

  • Как найти расположение источников модуля Python?
  • Создайте граф вызовов в python, включая модули и функции?
  • Перехват вызовов модуля?
  • __getattr__ на модуле
  • Ошибка PyCharm: «Нет модуля» при попытке импортировать собственный модуль (скрипт python)
  • Модуль Python и __all__
  • 4 Solutions collect form web for “Python: доступ к «областям модуля» vars”

    Вероятно, вы захотите ознакомиться с пространствами имен Python . Путь 1 правильный, но, как правило, не нужен, никогда не используйте 2. Более простой подход – просто использовать dict (или класс или какой-либо другой объект):

     my_globals = {'var': None} def my_func(): my_globals['var'] = 'something else' 

    Присвоения всегда входят в самую внутреннюю область действия, и в первую очередь всегда просматривается самая внутренняя область, поэтому требуется глобальное ключевое слово. В этом случае вы не назначаете имя, поэтому это необязательно.

    Способ 1 – это правильный способ, когда вы абсолютно должны восстановить глобальную переменную. Однако вы должны спросить себя, почему вы изменяете глобальность, и есть ли что-то лучше, что вы можете сделать (например, инкапсулировать поведение в классе).

    Следует избегать импорта модуля в себя, поскольку он подвержен ошибкам. Если модуль также является скриптом, вам иногда нужно импортировать __main__ вместо этого, или если модуль является частью пакета, возможно, вам следует импортировать foo.my_module . Короче говоря, не делайте этого.

    Импорт модуля внутри себя может иметь нежелательные побочные эффекты (например, оценивать утверждения более одного раза.) Я бы предложил использовать «Путь 1» и инструмент, подобный pylint, чтобы помочь проверить ваш код и обеспечить соблюдение общих практик.

    PyLint можно найти по адресу: http://www.logilab.org/project/pylint

    Избегайте установки глобальных переменных вообще. Вы можете легко создавать новые пространства имен с классами, поэтому используйте переменные класса, если нужно.

    Для чего-то серьезного вам нужен подходящий дизайн с классами.

    Python - лучший язык программирования в мире.