Что такое __name__ в Python?

Поділитися
Вставка
  • Опубліковано 19 жов 2024
  • Возможно вы сталкивались в коде с конструкцией if _name_ == "__main__" и не до конца понимали, зачем она нужна? Давайте разберемся, что это за _name_ и __main__!
    Я в Telegram - t.me/tricky_py...
    Канал создан при поддержке сообщества Moscow Python.
    Наш UA-cam-канал - / @moscowdjangoru
    Курсы Learn Python - learn.python.ru/

КОМЕНТАРІ • 41

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 11 місяців тому

    Потрясающе наглядно, доступно, понятно!!!! 🔥👍 Благодарю!!
    Посмотрел много разных видео про "if main", но понимание пришло только сейчас.

  • @Михаил-л9д9л
    @Михаил-л9д9л 2 роки тому +5

    как же прекрасно обьяснили, и очень помогли. Спасибо.

  • @a_gassi
    @a_gassi 2 роки тому +6

    Почему все объясняют этот момент на каких-то замудренных примерах?
    Так и не понял, ГДЕ указывать эту конструкцию: в файле, В КОТОРОМ импортим или ИЗ КОТОРОГО импортим?
    Так же не понятно, ЧТО оборачивать этой приблудой.
    Пример:
    Есть у меня есть файл 1.ру, содержащий две переменные: а = 10, с = 20.
    Также есть файл 2.ру, в котором я хочу вызвать из 1.ру ТОЛЬКО переменную "с".
    Так ГДЕ ИМЕННО в этих файлах мне нужна конструкция if _name_ == "_main__"
    ???

    • @MynameisZOOM
      @MynameisZOOM 4 місяці тому

      Согл, тут лучше либо искать хороших блогеров, либо гуглить эту тему. На сайтах даже могут объяснить даже лучше чем любой блогер

  • @ИринаЭнтелис
    @ИринаЭнтелис 10 місяців тому

    Спасибо! Подписалась на ваш канал

  • @smilngpersn222
    @smilngpersn222 Рік тому +1

    😁 спасибо

  • @Muxa-ez7df
    @Muxa-ez7df 3 роки тому +2

    Здорово, как раз не очень понимал зачем это нужно. Спасибо!

  • @AndreyTorlopov
    @AndreyTorlopov 2 роки тому +1

    Каждый раз буду писать что вот такие мелочи и нюансы оказываются самыми полезными.

  • @EugeniiPetrov74
    @EugeniiPetrov74 21 день тому

    Михаил спасибо!
    Только стоило рассказать, что именно храниться в __main__, чутка запутанно получилось

  • @viacheslavshambazov7445
    @viacheslavshambazov7445 3 роки тому +2

    О, давно хотел узнать!

  • @andreypolumestny7482
    @andreypolumestny7482 3 роки тому +5

    Михаил, спасибо за вашу работу! Могли бы вы подробнее объяснить часть "если вы хотите выполнить часть кола на верхнем уровне, то"
    например у меня есть файл с моделями базы данных и в нем же описывается подключение к бд.
    import ....
    base = declarative_base()
    database_uri = config['APP_DB']['DATABASE_URI']
    app_db = create_engine(DATABASE_URI)
    Session = sessionmaker(bind=app_db)
    @contextmanager
    def session_scope():
    session = Session()
    try:
    yield session
    session.commit()
    except Exception:
    session.rollback()
    raise
    finally:
    session.close()
    class Country(Base):
    __tablename__ = 'country'
    def get_date_for_sync(self):
    with session_scope() as s:
    date_for_synk = s.query(func.max(Country.country_date)).scalar()
    return date_for_synk
    при импорте такого модуля я получается буду перед импортом создавать коннект к базе?а если написать через
    if __name__ == '__main__':
    Base = declarative_base()
    DATABASE_URI = config['APP_DB']['DATABASE_URI']
    app_db = create_engine(DATABASE_URI)
    Session = sessionmaker(bind=app_db)
    то получается коннект к бд будет проходить непосредственно при вызове метода Country.get_date_for_sync()?

    • @Хитрыйпитон
      @Хитрыйпитон  3 роки тому

      Коннект надо все-же на верхнем уровне создавать. В случае с моделями и if __name__ == "__main__" может быть какой-то такой кейс например github.com/learnpythonru/databases3/blob/master/models.py#L50 - тут при прямом вызове файла мы создаем таблицы, а при импорте только инициализируем модельки

    • @enver-bey
      @enver-bey Рік тому +2

      Ниче не понял

  • @dimk7983
    @dimk7983 3 роки тому +1

    Спасибо, понятнее стало.

  • @sainco3036
    @sainco3036 3 роки тому +2

    Спасибо.

  • @viacheslavshambazov7445
    @viacheslavshambazov7445 3 роки тому +2

    Шрифт на экране сделайте побольше. Мелко все. (Надо именно увеличить шрифт. Не надо записывать часть экрана - так будет нечеткое изображение).

    • @bluxer4225
      @bluxer4225 3 роки тому

      Надо, не надо... Сделайте на своём канале, как надо :) или возьмитесь за лупу.

    • @learnpython4188
      @learnpython4188 3 роки тому

      Про шрифт уже были комментарии - сейчас есть блок предзаписанных видео, которые постепенно выкладываются, поэтому пока всё будет так, позже Михаил будет выкладывать видео с увеличенным шрифтом.

    • @viacheslavshambazov7445
      @viacheslavshambazov7445 3 роки тому

      @@learnpython4188 Хорошо, спасибо большое.

  • @АнтонБелоусов-ч7у
    @АнтонБелоусов-ч7у 3 роки тому +2

    А сделайте комментарии,под статьями в телеге ?

    • @Хитрыйпитон
      @Хитрыйпитон  3 роки тому

      Пока не включаю, так как на комментарии там меня точно не хватит, а включать и не заходить кажется не очень правильным

    • @learnpython4188
      @learnpython4188 3 роки тому

      Можете обсуждать в чатике MoscowPython - Михаил там также есть.

    • @АнтонБелоусов-ч7у
      @АнтонБелоусов-ч7у 3 роки тому

      @@Хитрыйпитон А зачем вам на все отвечать ,за вас это сделают подписчики.

    • @antonnekrasov4639
      @antonnekrasov4639 3 роки тому +1

      Поддерживаю! Читать в телеге комменты совсем не обязательно, если совсем будет необходимо, то тэгнуть всегда можно )) Мы бы там нубские некоторые моменты обсудили

    • @learnpython4188
      @learnpython4188 3 роки тому

      @@antonnekrasov4639 ну можно и тут спрашивать, если что. И тут тоже подписчики иногда помогают. :)

  • @RockstarAlexander
    @RockstarAlexander 3 роки тому

    👍👍👍

  • @aleksandrakonovalova5021
    @aleksandrakonovalova5021 3 роки тому +1

    Добрый день! Возник вопрос: почему у одних объектов есть атрибут __name__, а у других нет? У классов есть, а у экземпляров классов нет

    • @Хитрыйпитон
      @Хитрыйпитон  3 роки тому

      У объекта есть __name__ его класса. А так __name__ есть у классов, функций, методов, дескрипторов и генераторов docs.python.org/3/library/stdtypes.html?highlight=__name____#definition__.__name__

  • @vendjin
    @vendjin 3 роки тому +1

    т.е. сначала описываем функции, а после данной конструкции уже производим вызовы

  • @yarik83men51
    @yarik83men51 3 роки тому

    Спасибо. Сделайте высоту букв в Pycharm больше

  • @IndiaMagicTV
    @IndiaMagicTV 8 місяців тому

    ничего не понял

  • @RubySirius
    @RubySirius 2 роки тому +1

    С телефона код в VS не разглядеть

  • @limonred5283
    @limonred5283 3 роки тому +1

    Классное начало, быстро, мало слов. И так понятно из названия.
    Можно не вставлять в каждое видео долгое приветствие речь о том что это за видео для кого оно и для чего)
    Даже в чатах не принято здороваться уже.
    Тенденция однако)

    • @Хитрыйпитон
      @Хитрыйпитон  3 роки тому

      Вроде бы приветствие очень короткое, куда уж больше ужимать :)

    • @learnpython4188
      @learnpython4188 3 роки тому

      Не все смотрят все видео - некоторые находят видео в поиске, например. :)

  • @sfotin
    @sfotin 3 роки тому +6

    Чувак, понятно объяснить это не твоё

  • @МаксимИлясов-щ7т
    @МаксимИлясов-щ7т 2 роки тому +2

    Господи я нихера не понял

  • @dedovchemodanchik
    @dedovchemodanchik Рік тому

    Очень мелко. Плохо видно на телефоне

  • @TheGuitarRiot
    @TheGuitarRiot 5 місяців тому

    Согласен, ничено не понятно объясняет чел. Какой модуль, нафига он нужен, всё "hello world" сплошной, как у тех же бесполезных объясняльщиков на ютьюбах. Импортирует какие-то модули свои, время в них вставляет, по ходу прибавляет удаляет чего-то.
    Просто бы уж сказал - читайте документацию, и то понятнее было бы.

  • @АлексейЛуз-б3й
    @АлексейЛуз-б3й 10 місяців тому +1

    Но что же такое "main"?