Общий стиль кодирования для Python?
Я новичок в Python, и я хочу разработать свой первый серьезный проект с открытым исходным кодом. Я хочу спросить, что такое общий стиль кодирования для проектов python. Я также поставлю то, что я делаю прямо сейчас.
1.- Какая наиболее широко используемая ширина столбца? (вечный вопрос)
Я в настоящее время придерживаюсь 80 столбцов (и это боль!)
2.- Что цитаты использовать? (Я видел все, и PEP 8 ничего не говорит)
Я использую одинарные кавычки для всего, кроме docstrings, которые используют тройные двойные кавычки.
3.- Где я могу поместить свой импорт?
Я помещаю их в заголовок файла в этом порядке.
import sys
import -rest of python modules needed-
import whatever
import -rest of application modules-
<code here>
4.- Могу ли я использовать "import whatever.function как blah"?
Я видел некоторые документы, которые игнорируют это.
5.- Вкладки или пробелы для отступов?
В настоящее время используется 4 пробела.
6.- Переменный стиль именования?
Я использую строчные буквы для всех, кроме классов, которые я вставляю в camelCase.
Что бы вы рекомендовали?
Ответы
Ответ 1
PEP 8 в значительной степени является "корнем" всех общих руководств по стилю.
Google Руководство по стилю в стиле Python содержит некоторые части, которые достаточно хорошо продуманы, но другие - своеобразные (вместо двух популярных абзацев вместо популярных четырехмерные, а стиль CamelCase для функций и методов вместо стиля camel_case - довольно важные особенности).
На ваши конкретные вопросы:
1.- Какая наиболее широко используемая ширина столбца? (вечный вопрос) Я в настоящее время придерживаюсь 80 столбцов (и это боль!)
80 столбцов наиболее популярны
2.- Что цитаты использовать? (Я видел все, и PEP 8 не упоминает ничего ясно) Я использую single цитаты для всего, кроме докстеров, которые используют тройные двойные кавычки.
Я предпочитаю стиль, который вы используете, но даже Google не смог достичь консенсуса по этому поводу: - (
3.- Где я могу поместить свой импорт? Я помещаю их в заголовок файла в этом порядок.
import sys import -rest python необходимых модулей -
импортировать любые импортные прикладных модулей -
Да, отличный выбор и популярность тоже.
4.- Можно ли использовать "import what.функция как blah"? Я видел несколько документы, которые игнорируют это.
Я настоятельно рекомендую вам всегда импортировать модули - не конкретные имена изнутри модуля. Это не просто стиль - есть сильные преимущества, например. в проверяемости при этом. Предложение as
прекрасное, чтобы сократить имя модуля или избежать конфликтов.
5.- Вкладки или пробелы для отступов? В настоящее время используется 4 пробела.
В подавляющем большинстве наиболее популярны.
6.- Переменный стиль именования? Я использую строчные буквы для всех, кроме классов, который я положил в camelCase.
Почти все именуют классы с начальным и начальным строками в верхнем регистре.
Ответ 2
1.- У большинства из нас сейчас есть монитор 16: 9 или 16:10. Даже если у них нет широкого экрана, у них много пикселей, 80 колонок не являются большим практическим выключателем, как это было, когда каждый взламывал командную строку в удаленном окне терминала на мониторе 4: 3 на 320 X 240. Обычно я заканчиваю линию, когда она становится слишком длинной, что является субъективным. Я нахожусь в 2048 X 1152 на 23-дюймовом мониторе X 2.
2. - Одиночные кавычки по умолчанию, поэтому вам не нужно избегать двойных кавычек, двойных кавычек, когда вам нужно вставлять одинарные кавычки, и тройные кавычки для строк со встроенными символами новой строки.
3.- Поместите их в начало файла, иногда вы помещаете их в функцию main, если они не нужны глобально для модуля.
4. Это распространенная идиома для переименования некоторых модулей. Хорошим примером является следующее.
try:
# for Python 2.6.x
import json
except ImportError:
# for previous Pythons
try:
import simplejson as json
except ImportError:
sys.exit('easy_install simplejson')
но предпочтительным способом импорта только класса или функции является from module import xxx
с необязательным as yyy
при необходимости
5.- Всегда используйте ПРОСТРАНСТВА! 2 или 4, если нет TABS
6.- Классы должны содержать UpperCaseCamelStyle, переменные имеют нижний регистр, иногда lowerCamelCase или иногда all_lowecase_separated_by_underscores, также как и имена функций. "Константы" должны быть ALL_UPPER_CASE_SEPARATED_BY_UNDERSCORES
Если есть сомнения, обратитесь к PEP 8, источнику Python, существующим соглашениям в базе кода. Но самая важная вещь должна быть внутренне согласованной, насколько это возможно. Весь код Python должен выглядеть так, как будто он был написан одним и тем же человеком, когда это возможно.
Ответ 3
Поскольку я действительно схожу с ума по поводу "стилизации", я напишу рекомендации, которые я сейчас использую в проекте SLOC около 8k с примерно 35 файлами, большинство из которых соответствует PEP8.
-
PEP8 говорит 79 (WTF?), я иду с 80, и я привык к этому сейчас. Меньше движения глаз в конце концов!
-
Докстры и прочее, которое охватывает несколько строк в '' '. Все остальное в ''
. Также мне не нравятся двойные кавычки, я использую только одинарные кавычки все время... угадайте, потому что я пришел из угла JavaScript, где просто проще использовать "", потому что таким образом вам не нужно бежать все материал HTML: O
-
Во главе, встроенный перед пользовательским кодом приложения. Но я также использую подход "с ошибкой", поэтому, если есть что-то, что зависит от версии (например, GTK), я бы импортировал это первым.
-
В зависимости от времени, в большинстве случаев я использую импорт foo и foo import, но есть определенные случаи (eG имя уже определено другим импортом), я использовал из foo import bar как bla тоже.
-
4 Пространства. Период. Если вы действительно хотите использовать вкладки, убедитесь, что вы конвертируете их в пробелы перед тем, как совершать транзакции с SCM. НО НИКОГДА (!) СМЕШАННЫЕ ТАБЫ И ПРОСТРАНСТВА!!! Он может И ИСКЛЮЧАЕТ ужасные ошибки.
-
some_method или foo_function, CONSTANT, MyClass.
Также вы можете спорить об отступлении в случаях, когда вызов метода или что-то охватывает несколько строк, и вы можете спорить о том, какой стиль продолжения строки вы будете использовать. Либо окружайте все с помощью ()
, либо выполните \
в конце строки. Я делаю последнее, и я также помещаю операторов и другие вещи в начале следующей строки.
# always insert a newline after a wrapped one
from bla import foo, test, goo, \
another_thing
def some_method_thats_too_long_for_80_columns(foo_argument, bar_argument, bla_argument,
baz_argument):
do_something(test, bla, baz)
value = 123 * foo + ten \
- bla
if test > 20 \
and x < 4:
test_something()
elif foo > 7 \
and bla == 2 \
or me == blaaaaaa:
test_the_megamoth()
Также у меня есть некоторые рекомендации для операций сравнения, я всегда использую is(not)
для проверки с None True False
, и я никогда не делаю неявное логическое сравнение, например if foo:
, я всегда делаю if foo is True:
, динамическая типизация хороша, но в в некоторых случаях я просто хочу быть уверенным, что все пойдет правильно!
Еще одна вещь, которую я делаю, - никогда не использовать пустые строки! Они находятся в файле констант, в остальной части кода у меня есть такие вещи, как username == UNSET_USERNAME
или label = UNSET_LABEL
, это просто более описательно именно так!
У меня также есть некоторые строгие правила прокрутки и другие сумасшедшие вещи, но мне это нравится (потому что я сумасшедший), я даже написал script, который проверяет мой код:
http://github.com/BonsaiDen/Atarashii/blob/master/checkstyle
ПРЕДУПРЕЖДЕНИЕ (!): Это повредит вашим чувствам! Даже больше, чем JSLint делает...
Но это только мои 2 цента.