Каково соглашение об именовании в Python для имен переменных и функций?

StackOverflow https://stackoverflow.com/questions/159720

Вопрос

Исходя из опыта работы с 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?")

Руководящие принципы, вытекающие из Рекомендаций Гвидо enter image description here

Об этом есть статья: http://www.cs.kent.edu /~jmaletic/документы/ICPC2010-camelCase underscoreclouds.pdf

TL;DR Там говорится, что snake_case более удобочитаем, чем camelCase.Вот почему современные языки используют (или должны использовать) snake везде, где только могут.

Стиль кодирования обычно является частью внутренней политики / стандартов соглашений организации, но я думаю, что в целом стиль all_lower_case_underscore_separator (также называемый snake_case) наиболее распространен в python.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top