Python что значит двойное подчеркивание

Давайте разберемся с нижним подчеркиванием (_) в Python

Python что значит двойное подчеркивание. Смотреть фото Python что значит двойное подчеркивание. Смотреть картинку Python что значит двойное подчеркивание. Картинка про Python что значит двойное подчеркивание. Фото Python что значит двойное подчеркивание

Символ нижнего подчеркивания

Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.

Этот пост посвящен объяснению того, как использовать нижнее подчеркивание (_) и как его понимать в различных контекстах.

Известно пять случаев с использования нижнего подчеркивания в Python.

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

Случай использования в интерпретаторе

Интерпретатор Python’а хранит последнее значение в специальной переменной с именем «_». Эта особенность используется в первую очередь в стандартном интерпретаторе CPython, как, впрочем, и в других интерпретаторах Python.

Случай игнорирования значений

Нижнее подчеркивание также используется для игнорирования конкретных значений. Если конкретное значение не нужно или значения нигде не используются, просто присвойте их нижнему подчеркиванию.

Случай придания специфических значений именам переменных и функций

Нижнее подчеркивание часто используется в наименованиях. Стиль кодирования PEP8 в языке Python вводит соглашения по использованию следующих случаев наименований.

_single_leading_underscore

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

single_trailing_underscore_

Это соглашение предотвращает конфликты между ключевыми или стандартными словами.

__double_leading_underscore

В этом случае речь идет о синтаксисе, а не о соглашении. Двойное нижнее подчеркивание искажает имена атрибутов класса и исключает конфликты между именами атрибутов классов. (Так называемое «декорирование», означающее, что компилятор или интерпретатор изменяет имена переменных или функций по некоторым правилам). Правило декорирования в Python добавляется «_ИмяКласса» перед именами атрибутов, объявленных с двойным нижним подчеркиванием.

То есть, если написать метод с именем «__метод» в классе, имя будет декорировано следующим образом: «_ИмяКласса__метод».

Так как именованные атрибуты с двойным нижним подчеркиванием будут декорированы, так показано выше, мы не сможем получить к ним доступ по «ИмяКласса.__метод». Некоторые иногда пользуются этим как свойством подлинного сокрытия, на самом же деле это не служит для сокрытия и не рекомендуется для применения с подобными целями. Подробную информацию по этой теме можно найти в разделе по наименованиям в Python.

__double_leading_and_trailing_underscore__

Конечно можно создать специальный пользовательский метод, однако чаще прибегают к модификации предопределенных методов. (Например, для инициализации с помощью __init__ класса, который будет использоваться при создании экземпляра класса.)

Случай использования функций Internationalization(i18n) или «Localization(l10n)

Это просто соглашение, без синтаксических функций. Нижнее подчеркивание не означает i18n/l10n, это только соглашение, связывающее i18n / l10n, с переменной нижнего подчеркивания, взятой из соглашения в языке программирования С.

Случай разделения чисел в числе или символов в литерале

Это свойство было добавлено в Python 3.6 и используется для разделения чисел или цифр с помощью нижнего подчеркивания для их удобочитаемости.

Заключение

Итак, мы рассмотрели особенности и назначения применения нижнего подчеркивания в Python. И хотя я Python-программист, я сам не знал о некоторых его свойствах до написания этого поста. В частности, совершенно новым для меня оказалось использование функций i18n/l10n.

Надеюсь, что вы, как и я, нашли для себя много полезного при чтении моего поста. Спасибо!

Источник

Подчеркивание в именах¶

В Python подчеркивание в начале или в конце имени указывает на специальные имена. Чаще всего это всего лишь договоренность, но иногда это действительно влияет на поведение объекта.

Подчеркивание как имя¶

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

Например, если из строки line надо получить MAC-адрес, IP-адрес, VLAN и интерфейс и отбросить остальные поля, можно использовать такой вариант:

Такая запись говорит о том, что нам не нужны третий и четвертый элементы.

Но тогда может быть непонятно, почему переменные lease и entry_type не используются дальше. Если понятней использовать имена, то лучше назвать переменные именами вроде ignored.

Аналогичный прием может использоваться, когда переменная цикла не нужна:

Подчеркивание в интерпретаторе¶

В интерпретаторе python и ipython подчеркивание используется для получения результата последнего выражения

Одно подчеркивание¶

Одно подчеркивание перед именем¶

Одно подчеркивание перед именем указывает, что имя используется как внутреннее.

Например, если одно подчеркивание указано в имени функции или метода, это означает, что этот объект является внутренней особенностью реализации и не стоит его использовать напрямую.

Но, кроме того, при импорте вида from module import * не будут импортироваться объекты, которые начинаются с подчеркивания.

Например, в файле example.py такие переменные и функции:

Если импортировать все объекты из модуля, то те, которые начинаются с подчеркивания, не будут импортированы:

Одно подчеркивание после имени¶

Одно подчеркивание после имени используется в том случае, когда имя объекта или параметра пересекается со встроенными именами.

Два подчеркивания¶

Два подчеркивания перед именем¶

Два подчеркивания перед именем метода используются не просто как договоренность. Такие имена трансформируются в формат «имя класса + имя метода». Это позволяет создавать уникальные методы и атрибуты классов.

Если создать подкласс, то метод __configure не перепишет метод родительского класса Switch:

Два подчеркивания перед и после имени¶

Таким образом обозначаются специальные переменные и методы.

Например, в модуле Python есть такие специальные переменные:

Переменная __name__ чаще всего используется, чтобы указать, что определенная часть кода должна выполняться, только когда модуль выполняется напрямую:

А переменная __file__ может быть полезна в определении текущего пути к файлу скрипта:

Кроме того, таким образом в Python обозначаются специальные методы. Эти методы вызываются при использовании функций и операторов Python и позволяют реализовать определенный функционал.

Как правило, такие методы не нужно вызывать напрямую. Но, например, при создании своего класса может понадобиться описать такой метод, чтобы объект поддерживал какие-то операции в Python.

Ещё один специальный метод __str__ вызывается, когда используется оператор print или вызывается функция str(). Если необходимо, чтобы при этом отображение было в определенном виде, надо создать этот метод в классе:

Таких специальных методов в Python очень много. Несколько полезных ссылок, где можно почитать про конкретный метод:

Источник

Двойное подчеркивание в Python

И подчеркивание ( _ ), и двойное подчеркивание ( __ ) имеют большое значение в мире программирования Python и чрезмерно используются программистами для различных целей. Двойные подчеркивания очень удобны и часто встречаются в коде Python.

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

Используйте двойное подчеркивание в Python

Когда двойное подчеркивание приводит к заданному идентификатору ( __var ), процесс изменения имени происходит на этом конкретном идентификаторе.

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

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

Объяснение

Этот процесс изменения имен переменных с двойным подчеркиванием в начале полностью прозрачен для программиста. Изменение имени взаимодействует и изменяет все, что начинается с двойного подчеркивания, включая функции.

Использование двойного начального и конечного подчеркивания в Python

Когда переменная окружена двойным подчеркиванием как с ведущей, так и с конечной сторон, процесс изменения имени к ней не применяется.

Переменные, сгруппированные по двойному подчеркиванию, поскольку и префикс, и постфикс игнорируются интерпретатором Python.

Вы можете использовать следующий код для объяснения двойного подчеркивания в начале и в конце в Python.

В приведенном выше коде переменная foo с двойным подчеркиванием в качестве префикса и постфикса игнорируется интерпретатором, и изменение имени не происходит. Значение этой функции возвращается как результат, который доказывает, что переменная существует в списке атрибутов объекта.

Источник

Подчеркивание в Python

Знак подчеркивания _ или underscore занимает особое место в Python.

Python что значит двойное подчеркивание. Смотреть фото Python что значит двойное подчеркивание. Смотреть картинку Python что значит двойное подчеркивание. Картинка про Python что значит двойное подчеркивание. Фото Python что значит двойное подчеркивание

Подчеркивание имеет множество применений, как эстетических конвенций (необязательная договоренность разработчиков оформлять код с подчеркиваниями), так и функциональных, т. е. реально затрагивающих исполнение кода (такие места буду отмечать знаком ⚠️).

Поехали от самого известного к необычному!

Змеиный регистр

Это конвенция именования переменных и функций в Python: название начинается с маленькой буквы, а слова разделяют знаком подчеркивания. Думаю все и так знают:

Магические имена

Опять же, думаю, все видели, что имена магических методов и магических переменных начинаются и заканчиваются в двух знаком подчеркивания ( __init__ ). Вот, например, так:

Конфликт с ключевым словом

Если вам очень нужно назвать переменную, функцию или аргумент также как и какое-либо ключевое слово из Python, то принято в конце ставить знак подчеркивания, дабы избежать конфликта.

Бывает актуально, если вы пишите какой-то биндинг к сторонней библиотеке, где, к несчастью, некоторые понятия имеют такое же имя как и ключевые слова:

Но! Если вы пишите классовый метод, принято первый аргумент называть cls, а не class_.

Приватные члены

Приватные члены – это такие, которые предполагаются только для внутреннего использования классом или модулем. Они не должны использоваться из-вне, хотя Python и не запрещает это делать. Есть способы получить доступ к любым приватным вещам, если очень нужно.

Разделение на приватные и публичные члены – это механизм сокрытия (пожалуйста, не путайте с инкапсуляцией). Я писал про разницу между ними в статье «Сокрытие в Python». Здесь кратко напомню.

Если имя начинается с одного подчеркивания, то такая переменная, метод или класс в модуле считается приватной. Если вы обратитесь к приватной вещи из-вне модуля или класса, где она определена, то, вероятно, ваша IDE просто подчеркнет такой код, как подозрительный, но он будет выполняться без ошибок или предупреждения.

⚠️ Влияние на поведение: from module import * не будет импортировать приватные члены модуля. Но можно импортировать их принудительно: from module import _Base, _my_version

Еще приватнее или name mangling

Кстати, на слэнге двойное подчеркивание называется dunder. Добавление третьего и четвертого подчеркиваний к дополнительным эффектам не приведет!

Игнорирование

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

Так же при распаковке коллекций в переменные вы можете применить сколько угодно подчеркиваний.

Примечание: использовать значение _ в принципе можно (в нем будет последний присвоенный результат), но зачем?

С аргументами функций немного иначе. Среду аргументов может быть только одно подчеркивание. Если нужно игнорировать два и более аргумента, то перед их именами ставим подчеркивание, тогда IDE не будет ругаться.

Разделение разрядов в числах

Фишка добавлена в Python 3.6. Можно разделять разряды в длинных числах для облегчения чтения кода.

Последний результат в интерпретаторе

⚠️ Лично я не знал, про эту фишку, пока не стал писать эту статью. А между тем, она супер удобна, если вы используете интерпретатор Python как калькулятор:

Может, я что-то упустил? Если да, присылайте мне в Телеграм!

😈 Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈

Источник

Именование с подчеркиванием в Python

В Python подчеркивание _ имеет особое значение. Хотя подчеркивание используется просто для переменных и функций snake-case во многих языках, в Python он имеет особое значение. Они широко используются в различных сценариях, включая случаи, когда мы хотим игнорировать некоторое значение, или при объявлении переменных, методов и т.д.

Одиночное и двойное подчеркивание имеет значение в именах переменных и методов Python. Некоторые из этих значений просто условны, а некоторые навязываются интерпретатором Python.

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

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

1. Одиночный лидирующий символ подчеркивания: _var

Префикс подчеркивания предназначен для подсказки другому программисту, что переменная или метод, начинающийся с одного подчеркивания, предназначен для внутреннего использования. Это соглашение определено в PEP 8.

Имя с префиксом подчеркивания (например, _spam ) должно рассматриваться как непубличная часть API (будь то функция, метод или член данных). Его следует рассматривать как деталь реализации, которая может быть изменена без предварительного уведомления.

Посмотрите на следующий пример:

Давайте инстанцируем вышеуказанный класс и попробуем получить доступ к name и _age атрибутам.

Таким образом, одинарный префикс подчеркивания в Python является просто согласованным соглашением и не накладывает никаких ограничений на доступ к значению этой переменной.

2. Двойное ведущее подчеркивание: __var

Использование двойного подчеркивания ( __ ) перед именем (в частности, перед именем метода) не является условностью; оно имеет конкретное значение для интерпретатора.

Python сглаживает эти имена, и это используется, чтобы избежать столкновения имен с именами, определенными подклассами.

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

Чтобы лучше понять, мы создадим наш игрушечный класс для экспериментов:

Давайте посмотрим на атрибуты его объекта, используя встроенную dir() функцию:

Из приведенного выше списка атрибутов объекта видно, что self.name и self._age остаются неизменными и ведут себя так же.

Предполагаемое поведение здесь почти эквивалентно финальным переменным в Java и невиртуальным в C++.

3. Одиночный нижний колонтитул: var_

Для избежания конфликтов с ключевыми словами Python используется соглашение об именовании с одним подчеркиванием в конце

4. Двойное ведущее и направляющее подчеркивание: __var__

Имена, имеющие ведущее и последующее двойное подчеркивание (“dunders”), зарезервированы для специального использования, например, для метода __init__ для конструкторов объектов, или __call__ для того, чтобы сделать объект вызываемым. Эти методы известны как dunder методы.

Честно говоря, ничто не мешает нам написать собственное dunder (глупость) имя, но лучше не использовать их в наших программах, чтобы избежать столкновений с будущими изменениями в языке Python. (ссылка на статью которая подробно описывает dunders исчерпывающе).

5. Одиночное подчеркивание: _

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

Например, в следующем цикле нам не нужен доступ к бегущему индексу, и мы можем использовать “ _ ”, чтобы указать, что это всего лишь временное значение:

Выводы:

Знание различных underscores паттернов поможет в написании нашего кода более питоническим.

Здесь мы приводим краткое резюме наших 5 шаблонов подчеркивания для соглашений об именовании, которые мы рассмотрели выше.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *