Каково соглашение об именовании в Python для имен переменных и функций?
-
03-07-2019 - |
Вопрос
Исходя из опыта работы с C #, соглашение об именовании переменных и методов обычно имеет либо camelCase, либо Pascal Case:
// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()
В Python я видел вышеописанное, но я также видел, как используются символы подчеркивания:
# python example
this_is_my_variable = 'a'
def this_is_my_function():
Существует ли более предпочтительный, окончательный стиль кодирования для Python?
Решение
Смотрите Python БОДРОСТЬ ДУХА 8.
Имена функций должны быть в нижнем регистре, с слов через запятую качестве это необходимо для улучшения читабельности.
Смешанный вариант разрешен только в контекстах где это уже преобладающий стиль
Переменные...
Используйте правила именования функций:в нижнем регистре слова разделяются подчеркиванием по мере необходимости для улучшения удобочитаемости.
Лично я отклоняюсь от этого, потому что я также предпочитаю mixedCase
закончился lower_case
для моих собственных проектов.
Другие советы
Руководство по стилю Google Python имеет следующее соглашение:
имя_модуля, имя_пакета, имя_класса, имя_метода_, имя_исключения, имя_функции, ГЛОБАЛЬНО_КОНСТАНТНОЕ_ИМЯ, глобальное_звуко_имя, имя_параметра экземпляра, имя_функции_функции, имя_параметра локального экземпляра
Аналогичная схема именования должна быть применена к CLASS_CONSTANT_NAME
Дэвид Гудгер (в книге "Code Like a Pythonista") здесь) описывает рекомендации ОПТОСОЗ 8 следующим образом:
joined_lower
для функций, методов, атрибутов, переменныхjoined_lower
илиALL_CAPS
для константStudlyCaps
для занятийcamelCase
только в соответствии с ранее существовавшими конвенциями
В качестве Руководство по стилю для кода Python допускает,
Соглашения об именовании библиотеки Python немного запутаны, поэтому мы никогда не добьемся полной согласованности
Обратите внимание, что это относится только к Python стандартная библиотека.Если они не могут получить это последовательным, то вряд ли есть большая надежда на наличие общепринятой конвенции для ВСЕ Есть ли код на Python?
Исходя из этого и приведенного здесь обсуждения, я бы сделал вывод, что это нет ужасный грех, если кто-то продолжает использовать, напримерСоглашения об именовании переменных и функций на Java или C # (четкие и устоявшиеся) при переходе на Python.Имея в виду, конечно, что лучше всего придерживаться любого преобладающего стиля для кодовой базы / проекта / команды.Как указано в Руководстве по стилю Python, внутренняя согласованность важнее всего.
Не стесняйтесь называть меня еретиком.:-) Как и в случае с OP, я не "Питонист", во всяком случае, пока.
Есть БОДРОСТЬ ДУХА 8, как показывают другие ответы, но PEP 8 - это всего лишь руководство по стилю для стандартной библиотеки, и в нем оно воспринимается только как евангелие.Одним из наиболее частых отклонений PEP 8 от других фрагментов кода является присвоение имен переменным, особенно методам.Единого преобладающего стиля не существует, хотя, учитывая объем кода, использующего mixedCase, если бы кто-то проводил строгую перепись, то, вероятно, в итоге получилась бы версия PEP 8 с mixedCase.Существует небольшое другое отклонение от PEP 8, которое столь же распространено.
Как уже упоминалось, в PEP 8 говорится, что нужно использовать lower_case_with_underscores
для переменных, методов и функций.
Я предпочитаю использовать lower_case_with_underscores
для переменных и mixedCase
для методов и функций делает код более понятным и читабельным.Таким образом, следуя Дзен питона "явное лучше неявного" и "Важна читабельность".
Лично я стараюсь использовать camelCase для классов, методов и функций mixedCase.Переменные обычно разделяются подчеркиванием (насколько я помню).Таким образом, я могу с первого взгляда определить, что именно я вызываю, а не все выглядит одинаково.
Большинство пользователей python предпочитают символы подчеркивания, но даже если я использую python уже более 5 лет, они мне все еще не нравятся.Они просто кажутся мне уродливыми, но, возможно, это все из-за Java в моей голове.
Мне просто больше нравится camelCase, так как он лучше соответствует способу именования классов, логичнее иметь SomeClass.doSomething()
чем SomeClass.do_something()
.Если вы посмотрите в global module index на python, вы найдете и то, и другое, что связано с тем фактом, что это коллекция библиотек из разных источников, которая росла со временем, а не что-то, что было разработано одной компанией, такой как Sun, со строгими правилами кодирования.Я бы сказал, что суть такова:Используйте все, что вам больше нравится, это всего лишь вопрос личного вкуса.
в дополнение к тому, что ответил @JohnTESlade. Руководство Google по стилю Python имеет несколько довольно аккуратных рекомендаций,
Имена, которых следует избегать
- имена из одного символа, за исключением счетчиков или итераторов
- тире (-) в названии любого пакета / модуля
\__double_leading_and_trailing_underscore__ names
(зарезервировано Python)
Соглашение об именовании
- "Внутренний" означает внутренний по отношению к модулю, защищенный или частный внутри класса.
- Добавление единственного символа подчеркивания (_) имеет некоторую поддержку для защиты переменных и функций модуля (не входит в комплект поставки import * from).Добавление двойного подчеркивания (__) к переменной экземпляра или методу эффективно служит для того, чтобы сделать переменную или метод закрытыми для своего класса (используя искажение имени).
- Объедините связанные классы и функции верхнего уровня в модуле.В отличие от Java, нет необходимости ограничивать себя одним классом для каждого модуля.
- Использование
CapWords
для имен классов, ноlower_with_under.py
для получения имен модулей.Хотя существует множество существующих модулей с названиямиCapWords.py
, теперь это не рекомендуется, потому что это сбивает с толку, когда модуль оказывается названным в честь класса.("подождите, я написалimport StringIO
илиfrom StringIO import StringIO
?")
Об этом есть статья: http://www.cs.kent.edu /~jmaletic/документы/ICPC2010-camelCase underscoreclouds.pdf
TL;DR Там говорится, что snake_case более удобочитаем, чем camelCase.Вот почему современные языки используют (или должны использовать) snake везде, где только могут.
Стиль кодирования обычно является частью внутренней политики / стандартов соглашений организации, но я думаю, что в целом стиль all_lower_case_underscore_separator (также называемый snake_case) наиболее распространен в python.
Как правило, соблюдаются соглашения, используемые в стандартной библиотеке языка.