Автор оригинала: Abhigyan Ojha.
Сегодня давайте обсудим что-то во всем месте во многих базах кода: что делает Если __name__
делать в Python?
Утверждение Если __name__:
Проверяет, если переменная __name__
установлен на строковое значение '__main__'
который содержит только в основном исходном файле, изначале вы изначально выполняете свой код. Во всех других контекстах, таких как в импортированных файлах кода – переменная __name__
устанавливается на другое значение.
Таким образом, Если __name__:
оценивает Правда
Если вы используете его в основном файле (тот, который у вас работает с Python Main.py
). Если вы импортируете его косвенно, он оценивает Ложь
Отказ
Это полезно, потому что вы обычно не хотите запустить код с побочными эффектами при импорте модулей.
Вы можете играть с кодом в этом минимальном примере:
Упражнение : Запустите кодовую оболочку. Какой вывод? Теперь создайте новый файл и Import Main. Отказ Что сейчас вывод?
Если вы изучаете Python Programming Step за шагом, вы бы где-то упаковывались в вышеуказанный кусок фрагмента кода. Даже если у вас нет, я уверен, что вы скоро встретите его, и это может почувствовать себя придурком в своем добром плавном путешествии в изучении программирования Python. Я был там. Я проходил через книгу о программировании Python, когда я впервые увидел этот кусок кода, и я подумал – подожди минутку, я пропустил что-нибудь на пути к сюдам? Затем я вернулся, пересмотрел последние несколько страниц, чтобы выяснить, что я пропустил, и этот цикл продолжал некоторое время, прежде чем я наконец сел столкнуться с демоном, и, честно говоря, я улыбнулся, когда я понял, что это так просто Отказ Может быть, мы узнаем так. Мы идем вперед и назад, продолжаем прыгать, а потом один день происходит волшебство. Единственное, что работает, не сдается.
Сегодня я постараюсь сделать это понимание простое для вас так, чтобы она, надея, принесет улыбку к вашему лицу, если вы находитесь в петле, чтобы получить намек на то, что он есть, а затем продолжать забывать.
Чтобы понять, что такое Если __name__
Используется для того, чтобы мы сначала погрузимся в некоторые примеры кода, чтобы понять, что __name__
и __main__
являются. Тогда мы будем цементировать обучение через другой пример. Так что будьте терпеливы и внимательно пройдите по статье. Кодовые фрагменты могут выглядеть немного запутано, но ждать, пока мы не объясним и не посмотрим, что именно происходит.
Что __название__ и __основной__ ?
Начнем с __name__
Отказ Проще говоря, __name__
это специальная переменная, которая встроена в Python.
В Python мы можем запустить код в качестве исходного файла или, другими словами, код Python, который работает самостоятельно (чтение – не импортируется из какого-либо отдельного исходного файла Python). Это предложение может быть запутано в данный момент, но давайте рассмотрим это дальше.
Посмотрите на фрагмент кода ниже. Это простой файл Python только с одной строкой:
print(f" First Module's Name : {__name__}")
Проще говоря, мы просим Python распечатать значение, которое __name__
Переменная имеет в данный момент. Обратите внимание, что нет оператора импорта или даже любой другой линии кода над ним.
фигура 1
Проверьте вывод на рисунке 2 ниже. Мы запускаем вышеуказанные строки кода и нахожу вывод
Имя первого модуля: __основной__
фигура 2
Мы импортируем module1.py
в module2.py
и попросите Python вернуть имя второго модуля (второе, потому что это второй код Python, который мы работаем), сохраненные в __name__ переменная снова.
Рисунок 3.
# File: module2.py import module1 print(f"Second Module's Name : {__name__}")
Интересно, на рисунке 5 ниже у нас есть выход
Имя первого модуля: Module1
Имя второго модуля: __main__
Рисунок 4.
Вышеуказанная информация обобщена просто можно объяснить следующим образом. Python начинает выполнять первую строку кода, найденной в файле Python, но до того, как он пройдет что-нибудь, чтобы показать выход, Python определяет некоторые специальные переменные. __name__ это одна такая переменная. Когда исходный файл выполнен на свой собственный I.e, не импортируемый из какого-либо другого исходного кода, __name__ Переменная установлена на значение __main__ и, следовательно, вывод мы получили на рисунке 3, было Имя первого модуля: __main__ Отказ Если вы импортируете файл из другого модуля (как в фрагменте кода с рисунка 4), значение __name__ Переменная установлена на имя модуля, который он импортируется. Следовательно, вывод на рисунке 5.
Теперь давайте посмотрим на последовательность исполнения.
- Module1.py на рисунке 1 выполняется,
- Переменная __name__ установлен на значение __основной__
- __main__ Модуль выполнен, а выход – Имя первого модуля: __main__
- Module2.py на рисунке 4 выполняется,
- Переменная __name__ установлен на значение модуль1.
- Модуль1 это блок кода в Module1.py, который выполняется, а выход – Имя первого модуля: Module1
- Далее мы переходим к линии 3 в Module2.py, значение имени сбрасывается на __main__ потому что это свежий кусок кода в Module2.py, а выход – Имя второго модуля: __main__
Используя, если __name__
Но давайте подумаем только относительно кода в Module2.py. В реальном мире с Module2.py я не хотел бы распечатать вывод из Module1.py скорее только импортировать некоторые функциональные возможности и получить вывод для линий кода, написанные в Module2.py I.e. Имя второго модуля: __main__
Но как мы можем это сделать? Должен быть способ, потому что это кажется более логичным таким образом. Обратитесь к фрагменту кода ниже на рисунке 6.
Рисунок 5.
# File: module1.py '''print(f"First Module's Name : {__name__}")''' def main(): print(f"First Module's Name : {__name__}") if __name__ == '__main__': main()
Итак, мы определим функцию Главная ()
и положите оператор печати из module1.py
внутри основной функции. Теперь мы используем этот маленький трюк с использованием оператора Если __name__
и поместите основную функцию внутри этого, если утверждение. Теперь давайте посмотрим на последовательность выполнения нашей программы.
- У нас есть
Главная ()
Функция, где мы просим распечатать имя первого модуля, хранящегося в__name__
Переменная. Из приведенного выше примера мы знаем, что значение, хранящееся в__name__
Переменная – это__main__
Отказ - В строке 7, мы говорим, если ценность в
__name__
Переменная равна__main__
только потом идите вперед и выполнитеГлавная ()
функция. - Теперь запустите модифицированный модуль1.py, мы видим вывод как Имя первого модуля:
__main__
как и ожидалось. Обратитесь к первому выходу на рисунке 7 - Теперь, когда мы запуская Module2.py, мы получаем вывод как Имя второго модуля:
__основной__
Обратите внимание, как вывод для Module2.py изменился сейчас. Хотя мы импортировали Module1 в нашей программе Module2.py, программа в Module1.py не работает. Почему? Потому что значение, хранящееся в __name__ Переменная в этот момент модуль1, а не __main__ Отказ Итак, используя основную () функцию и Если __name__ Положил ограничения на выполнение строк кода в Module1.py, так как он будет выполнен только Module1.py только если __название__
Рисунок 6.
Положить все это в реальный пример
Теперь мы берем более общий пример, что привело бы больше смысла всего, что мы обсуждали выше.
- Посмотрите на следующий фрагмент кода из
кубики .py
На рисунке 8. В строке 1 и линия 2 у нас есть функциякуб ()
, который беретNum
как аргумент. Функциякубики (Num)
Возвращает кубик данного числа. - В строке 4 мы используем цикл для цикла, который передает список номеров от 0 до 9.
- В строке 5 мы используем
кубики (Num)
Функция с i в качестве ввода для отображения куба, как показано на рисунке 9. Достаточно простого.
Рисунок 7.
Рисунок 8.
def cube(num): return num ** 3 for i in range(10): print(f"{i} cubed is {cube(i)}")
В кодовом фрагменте от Modules.py
Ниже на рисунке 10 мы импортируем Куб (Num)
Функция из кубики .py
и попробуйте распечатать кубик 10 в строке 3. Логично, мы пытаемся использовать функцию Куб (Num)
, который возвращает кубик любого данного номера ввода.
Рисунок 9.
# File modules.py from cubes import cube print(cube(10))
Однако посмотрите на выход ниже. У нас есть вывод как программ кубики .py
и Modules.py
Отказ Это не то, что мы намереваемся или хотели сделать.
Рисунок 10.
Помните объяснение сверху, где мы использовали Если __name__ Ограничить выполнение кода из Модули1.пи
Отказ Давайте попробуем реализовать ту же идею и посмотреть, если это работает здесь.
В кодовом фрагменте от CubesModified.py
На рисунке 11 мы помещаем петлю и оператор печати с Cubes.py в основной () функции. И снова мы используем утверждение Если __name__ Для выполнения кода из CubesModified.py только тогда, когда значение __name__ переменная равен __основной__.
Рисунок 11.
# File: cubesModified.py def cube(num): return num ** 3 def main(): for i in range(10): print(f"{i} cubed is {cube(i)}") ''' effectively what this line of code is trying to say here is if name equals main or in other words, "if I am currently running this particular file (cubesModified.py)" then run the main function.''' if __name__ == "__main__": main()
Мы бежим CubesModified.py
и получить вывод, как показано ниже и на наше ожидание.
Рисунок 12.
Однако, когда мы бежим ModulesModified.py
где мы импортируем Куб (Num)
Функция из CubesModified.py
он только выполняет код из нашего ModulesModified.py
Как показано на рисунке 15, и вывод составляет 1000, потому что значение, хранящееся в __name__ Переменная в CubesModified, а не __основной__.
Рисунок 13.
# File: cubesModified from cubesModified import cube print(cube(10))
Рисунок 14.
Я надеюсь, что это объяснение поможет вам с лучшего понимания того, что делает Если __name__ Отказ Идите вперед и играйте с кодом в редакторе кода и цените ваше понимание. Удачи!!
Автор
Эта статья вносят вклад в соответствии с Finxter Абхигян Ойха Отказ Вы можете найти свой рабочий профиль здесь.