что такое __name__ когда мы импортируем более одного модуля в сценарий python - PullRequest
0 голосов
/ 10 марта 2020

Когда мы запускаем скрипт foo.py, глобальная переменная __name__ устанавливается на "__main__", а при запуске следующего скрипта

    #Here we import the foo.py module
    import foo

    print("This is a Stackoverflow question")

__name__ равняется foo. Мой вопрос: если у нас есть другой импортируемый модуль, скажем foo1.py

    #Here we import foo.py and foo1.py modules
    import foo, foo1

    print("This is still the same Stackoverflow question")

, тогда каково значение __name__ в этом случае? Очевидно, что вышеизложенное обобщается на любое количество модулей.

PS Прежде чем опубликовать вопрос, я попробовал сам, и ответ был __main_, что смущает больше.

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

На имя импортированного модуля не влияют другие операции импорта, выполненные в том же сценарии.

import foo, foo1

print(f"foo name = {foo.__name__}")
print(f"foo1 name = {foo1.__name__}")
print(f"this scripts name = {__name__}")

Результат:

foo name = foo
foo1 name = foo1
this scripts name = __main__
0 голосов
/ 10 марта 2020

__name__ - это всегда название модуля. "__main__" просто используется, когда файл не используется для создания модуля, т. Е. Когда он запускается как скрипт.

В вашем первом примере __name__ равен только в foo в foo.py, а не в импортируемый файл foo.

Рассмотрим простой файл tmp.py, содержащий только

print(__name__)

Если вы запустите этот файл как скрипт вывод: __main__.

$ python tmp.py
__main__

Если вы импортируете его как модуль, вывод будет tmp.

$ python -c 'import tmp'
tmp
...