Исходя из фона C #, соглашения о присвоении имен для переменных и имен методов обычно бывают camelCase или PascalCase:
// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()
В Python я видел вышеупомянутое, но я также видел подчеркивание:
# python example
this_is_my_variable = 'a'
def this_is_my_function():
Есть ли более предпочтительный, определенный стиль кодирования для Python?
findMeAClass
возможно, более уродлив, чемfind_me_a_class
.Руководство по стилю Google Python имеет следующее соглашение:
Аналогичная схема именования должна применяться к
CLASS_CONSTANT_NAME
источник
property
... возможно, дело в том, какой предмет притворяется, а не в том, чем он является на самом делеДэвид Гуджер (в «Коде как Pythonista» здесь ) описывает рекомендации PEP 8 следующим образом:
joined_lower
для функций, методов, атрибутов, переменныхjoined_lower
илиALL_CAPS
для константStudlyCaps
для занятийcamelCase
только в соответствии с ранее существовавшими соглашениямиисточник
joined_lower
для постоянных , только «всех заглавных букв подчеркивания отделяя слова». Любопытно также о новой функции enum .StudlyCaps for classes
отличное универсальное правило для занятий практически на всех языках. Тогда почему некоторые встроенные в Python классы (напримерdatetime.datetime
, не соблюдающие это соглашение?unittest.TestCase.assertEqual
и друзья тоже не соблюдают соглашение snake_case. Правда состоит в том, что части стандартной библиотеки Python были разработаны до того, как соглашения укрепились, и теперь мы застряли с ними.Как признается в Руководстве по стилю для кода Python ,
Обратите внимание, что это относится только к стандартной библиотеке Python . Если они не могут добиться такой последовательности, то вряд ли можно надеяться на общепринятую конвенцию для всех. кода Python, есть?
Из этого и из обсуждения здесь я бы сделал вывод, что это не страшный грех, если при переходе на Python продолжать использовать, например, Java или C # (четкие и устоявшиеся) соглашения об именах переменных и функций. Имея в виду, конечно, что лучше всего придерживаться того, какой бы ни был преобладающий стиль для кодовой базы / проекта / команды. Как указывает руководство по стилю Python, внутренняя согласованность важнее всего.
Не стесняйтесь уволить меня как еретика. :-) Как и OP, я не "Pythonista", во всяком случае, пока.
источник
Существует PEP 8 , как показывают другие ответы, но PEP 8 - это только руководство по стилю для стандартной библиотеки, и в нем оно воспринимается только как Евангелие. Одним из наиболее частых отклонений PEP 8 для других частей кода является именование переменных, особенно для методов. Единого преобладающего стиля не существует, хотя, учитывая объем кода, который использует mixedCase, если провести строгую перепись, возможно, получится версия PEP 8 с mixedCase. Есть небольшое другое отклонение от PEP 8, которое является столь же распространенным.
источник
Как уже упоминалось, в PEP 8 говорится об использовании
lower_case_with_underscores
переменных, методов и функций.Я предпочитаю использовать
lower_case_with_underscores
для переменных, а такжеmixedCase
для методов и функций делает код более явным и читабельным. Таким образом, следование дзену Python «явное лучше, чем неявное» и «количество читабельности»источник
далее на что @JohnTESlade ответил. Руководство по стилю Google Python содержит несколько довольно аккуратных рекомендаций,
Имена, которых следует избегать
\__double_leading_and_trailing_underscore__ names
(зарезервировано Python)Соглашение об именовании
CapWords
для имен классов, ноlower_with_under.py
для имен модулей. Несмотря на то, что существует много названных модулейCapWords.py
, это не рекомендуется, потому что вводит в заблуждение, когда модуль назван в честь класса. («подожди - я написалimport StringIO
илиfrom StringIO import StringIO
?»)Руководства, основанные на рекомендациях Гвидо
источник
Большинство людей, предпочитающих python, предпочитают подчеркивание, но даже я использую python уже более 5 лет, но я до сих пор не люблю их. Они просто выглядят мне некрасиво, но, возможно, это все, что связано с Java в моей голове.
Мне просто нравится CamelCase лучше, так как он лучше подходит для именования классов. Это логичнее,
SomeClass.doSomething()
чем иметьSomeClass.do_something()
. Если вы посмотрите в глобальном модульном индексе в python, вы найдете и то, и другое, что связано с тем, что это коллекция библиотек из разных источников, которые со временем выросли, а не что-то, разработанное одной компанией, такой как Sun, со строгими правилами кодирования. , Я бы сказал, что суть в том, чтобы использовать то, что вам больше нравится, это просто вопрос личного вкуса.источник
make_xpath_predicate
,make_xpath_expr
,make_html_header
,make_html_footer
SomeClass.doSomething()
(статические методы обычно редки), вы обычно вызываетеan_instance.do_something()
Лично я пытаюсь использовать CamelCase для классов, методов и функций mixedCase. Переменные обычно разделяются подчеркиванием (когда я могу вспомнить). Таким образом, я могу сразу увидеть, что именно я звоню, а не все выглядит одинаково.
источник
Об этом есть статья: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf
TL; DR Это говорит о том, что snake_case более читабелен, чем camelCase. Вот почему современные языки используют (или должны использовать) змею везде, где могут.
источник
Стиль кодирования обычно является частью внутренних стандартов политики / конвенции организации, но в целом, я думаю, что стиль all_lower_case_underscore_separator (также называемый snake_case) наиболее распространен в python.
источник
Я лично использую соглашения об именах в Java при разработке на других языках программирования, так как они последовательны и просты в использовании. Таким образом, я не буду постоянно спорить о том, какие соглашения использовать, которые не должны быть самой сложной частью моего проекта!
источник
library_function(my_arg)
).Как правило, следуют соглашениям, используемым в стандартной библиотеке языка.
источник