Что такое соглашение об именах в Python для имен переменных и функций?
Исходя из фона С#, соглашения о присвоении имен для переменных и имен методов обычно бывают camelCase или PascalCase:
// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()
В Python я видел вышеупомянутое, но я также видел подчеркивание:
# python example
this_is_my_variable = 'a'
def this_is_my_function():
Есть ли более предпочтительный, определенный стиль кодирования для Python?
Ответы
Ответ 1
См. Python PEP 8.
Названия функций должны быть строчными, со словами, разделенными символами подчеркивания, как для улучшения удобочитаемости.
mixedCase допускается только в контекстах где это уже преобладает стиль
Переменные...
Используйте правила именования функций: нижний регистр со словами, разделенными подчеркивает, что необходимо улучшить читаемость.
Лично я отклоняюсь от этого, потому что я также предпочитаю mixedCase
над lower_case
для своих собственных проектов.
Ответ 2
Руководство по стилю Google Python имеет следующее соглашение:
module_name, package_name, ClassName, method_name, ExceptionName,
function_name, GLOBAL_CONSTANT_NAME, global_var_name,
instance_var_name, function_parameter_name, local_var_name
Аналогичная схема именования должна применяться к CLASS_CONSTANT_NAME
Ответ 3
Дэвид Гудгер (в "Code Like a Pythonista" здесь) описывает рекомендации PEP 8 следующим образом:
-
joined_lower
для функций, методов,
атрибуты, переменные
-
joined_lower
или ALL_CAPS
для
Константы
-
StudlyCaps
для классов
-
camelCase
только для соответствия
ранее существовавшие соглашения
Ответ 4
Как Руководство по стилю для кода Python допускает,
Соглашения об именах Python библиотека немного беспорядочна, поэтому мы будем никогда не получите это полностью согласованное
Обратите внимание, что это относится только к стандартной библиотеке Python. Если они не могут получить это согласованно, то вряд ли есть большая надежда иметь общепринятое соглашение для всего кода Python, есть ли?
Из этого и обсуждения здесь я бы сделал вывод, что не ужасный грех, если продолжать использовать, например. Java или С# (четкие и хорошо установленные) соглашения об именах для переменных и функций при переходе на Python. Имея в виду, конечно, что лучше всего придерживаться любого преобладающего стиля для кодовой базы/проекта/команды. Как указывает руководство по стилю Python, важна внутренняя согласованность.
Не стесняйтесь увольнять меня как еретика.:-) Как и OP, я не являюсь "Pythonista", еще не все равно.
Ответ 5
Существует PEP 8, как показывают другие ответы, но PEP 8 является только стилем для стандартной библиотеки и используется только как евангелие в нем. Одним из наиболее частых отклонений PEP 8 для других фрагментов кода является именование переменных, особенно для методов. Нет единого преобладающего стиля, хотя, учитывая объем кода, который использует mixedCase, если кто-то должен был провести строгую перепись, вероятно, в конечном итоге окажется версия PEP 8 с mixedCase. Существует немного другого отклонения от PEP 8, что довольно распространено.
Ответ 6
Как уже упоминалось, PEP 8 говорит использовать lower_case_with_underscores
для переменных, методов и функций.
Я предпочитаю использовать lower_case_with_underscores
для переменных и mixedCase
для методов и функций, делая код более явным и читаемым. Таким образом, следуя Zen of Python, "явный лучше, чем неявный" и "Readability counts"
Ответ 7
Лично я пытаюсь использовать CamelCase для классов, методов и функций mixedCase. Переменные обычно выделяются (если я помню). Таким образом, я могу сразу сказать, что именно я называю, а не все, что выглядит одинаково.
Ответ 8
далее на что @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]()
Ответ 9
Большинство пользователей python предпочитают подчеркивания, но даже я использую python с тех пор, как более 5 лет, мне все еще не нравятся. Они просто выглядят уродливыми для меня, но, может быть, все Java в моей голове.
Мне просто нравится CamelCase лучше, так как он лучше подходит для классов, названных классами. Логичнее иметь SomeClass.doSomething()
, чем SomeClass.do_something()
. Если вы посмотрите в глобальном модульном индексе в python, вы найдете то и другое, что связано с тем, что это коллекция библиотек из разных источников, которые росли сверхурочно, а не то, что было разработано одной компанией, такой как Sun, со строгими правилами кодирования, Я бы сказал, что нижняя строка: используйте все, что вам нравится, это просто вопрос личного вкуса.
Ответ 10
Об этом есть статья: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf
TL; DR. Это говорит о том, что snake_case более читабелен, чем camelCase. Вот почему современные языки используют (или должны использовать) змею везде, где могут.
Ответ 11
Стиль кодирования обычно является частью внутренних правил политики/конвенций организации, но я думаю, что в общем случае стиль all_lower_case_underscore_separator (также называемый snake_case) наиболее распространен в python.
Ответ 12
Я лично использую соглашения об именах Java при разработке на других языках программирования, так как они последовательны и просты в использовании. Таким образом, я не буду постоянно спорить о том, какие соглашения использовать, которые не должны быть самой сложной частью моего проекта!
Ответ 13
Как правило, следуйте соглашениям, используемым в стандартной библиотеке языков.