Рубрики
Без рубрики

Что делает “если __name__” сделать в Python?

Сегодня давайте обсудим что-то, что все это место во многих базах кода: что делать, если __name__ do в Python? Заявление Если __name__: проверяет, установлена ли переменная __name__ на строковое значение «__main__», который удерживает только в основном исходном файле, изначально вы изначально выполняете свой код. Во всех других … Что делает «если __name__» сделать в Python? Прочитайте больше “

Автор оригинала: 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.

Теперь давайте посмотрим на последовательность исполнения.

  1. Module1.py на рисунке 1 выполняется,
  2. Переменная __name__ установлен на значение __основной__
  3. __main__ Модуль выполнен, а выход – Имя первого модуля: __main__
  4. Module2.py на рисунке 4 выполняется,
  5. Переменная __name__ установлен на значение модуль1.
  6. Модуль1 это блок кода в Module1.py, который выполняется, а выход – Имя первого модуля: Module1
  7. Далее мы переходим к линии 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__ и поместите основную функцию внутри этого, если утверждение. Теперь давайте посмотрим на последовательность выполнения нашей программы.

  1. У нас есть Главная () Функция, где мы просим распечатать имя первого модуля, хранящегося в __name__ Переменная. Из приведенного выше примера мы знаем, что значение, хранящееся в __name__ Переменная – это __main__ Отказ
  2. В строке 7, мы говорим, если ценность в __name__ Переменная равна __main__ только потом идите вперед и выполните Главная () функция.
  3. Теперь запустите модифицированный модуль1.py, мы видим вывод как Имя первого модуля: __main__ как и ожидалось. Обратитесь к первому выходу на рисунке 7
  4. Теперь, когда мы запуская 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 Абхигян Ойха Отказ Вы можете найти свой рабочий профиль здесь.