Я довольно плохо знаком с 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. - Я могу использовать "импорт whatever.function в качестве вздора"?
Я видел некоторые документы то игнорирование, делающее это.
5. - Вкладки или пробелы для расположения с отступом?
В настоящее время использование 4 вкладок пробелов.
6. - Переменный стиль именования? Я использую нижний регистр для всего кроме классов, которые я вставил Camel-регистр.
Что-нибудь Вы рекомендовали бы?
PEP 8 в значительной степени является «корнем» всех общих руководств по стилю.
В руководстве по стилю Google Python есть некоторые части, которые достаточно хорошо продуманы, но другие являются своеобразными (отступы с двумя пробелами вместо популярных с четырьмя пробелами и стиль CamelCase для функций и методов вместо стиля camel_case - довольно серьезные особенности).
Переходя к конкретным вопросам:
1.- Какая ширина столбца наиболее широко используется? (вечный вопрос) Сейчас я придерживаюсь 80 столбцов (и это больно!)
80 столбцов наиболее популярны
2.- Какие цитаты использовать? (Я видел все, и PEP 8 не упоминает ничего ясного) Я использую одинарные кавычки для всего, кроме строк документации, в которых используются тройные двойные кавычки.
Я предпочитаю стиль, который вы используете, но даже Google не смог прийти к единому мнению по этому поводу: - (
3.- Куда мне поместить свои импорты? Я помещаю их в заголовок файла в этом порядок.
import sys import -rest of python modules required-
import any import -rest of application modules-
Да, отличный выбор, и популярны тоже.
4.- Могу ли я использовать «import something.function as blah»? Я видел несколько документов, в которых это не делается.
Я настоятельно рекомендую вам всегда импортировать модули, а не конкретно имена изнутри модуля.Это не просто стиль - это дает сильные преимущества, например, в тестируемости. Предложение as
подходит для сокращения имени модуля или предотвращения конфликтов.
5. - Табуляторы или пробелы для отступов? В настоящее время используются табуляции с четырьмя пробелами.
Чрезвычайно популярны.
6.- Стиль именования переменных? Я использую строчные буквы для всего, кроме классов, которые я помещаю в camelCase.
Почти все называют классы прописными буквами, а константы - прописными.
Поскольку я действительно помешан на "стилизации", я напишу руководящие принципы, которые я сейчас использую в проекте размером почти 8k SLOC с примерно 35 файлами, большая часть которых соответствует PEP8.
PEP8 говорит 79 (WTF?), я использую 80 и уже привык к этому. Меньше движения глаз, в конце концов!
Docstrings и прочее, что занимает несколько строк, в '''. Все остальное в '''
. Также мне не нравятся двойные кавычки, я все время использую только одинарные... наверное, это потому, что я пришел из JavaScript, где проще использовать '', потому что так не нужно экранировать все HTML-штучки :O
В голове, встроенной перед пользовательским кодом приложения. Но я также придерживаюсь подхода "провалиться раньше", так что если есть что-то, что зависит от версии (например, GTK), я импортирую это первым.
Зависит, в большинстве случаев я использую import foo и from foo import, но в некоторых случаях (например, имя уже определено другим импортом) я использую from foo import bar как bla.
4 Пробела. Точка. Если вы действительно хотите использовать табуляцию, обязательно преобразуйте ее в пробелы перед фиксацией при работе с SCM. НО НИКОГДА(!) НЕ СМЕШИВАЙТЕ ТАБУЛЯЦИЮ И ПРОБЕЛЫ!!! Это может И БУДЕТ приводить к ужасным ошибкам.
some_method или foo_function, a 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
, так более наглядно!
У меня также есть строгие правила по пробелам и другие безумные вещи, но мне это нравится (потому что я помешан на этом), я даже написал скрипт, который проверяет мой код:
http://github.com/BonsaiDen/Atarashii/blob/master/checkstyle
WARNING(!): Это заденет ваши чувства! Даже больше, чем JSLint...
Но это только мои 2 цента.
1.- Сейчас почти у всех есть монитор 16: 9 или 16:10. Даже если у них нет широкоформатного экрана, у них много пикселей, 80 cols не такой уж большой практический отказ, как это было, когда все взламывали командную строку в окне удаленного терминала на мониторе 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')
но предпочтительный способ импорта только класса или функции - из импорта модуля xxx
с необязательным как yyy
при необходимости
5.- Всегда используйте ПРОБЕЛЫ! 2 или 4, если нет TABS
6. - Классы должны использовать UpperCaseCamelStyle, переменные в нижнем регистре, иногда в нижнем регистре, а иногда в all_lowecase_separated_by_underscores, как и имена функций. «Константы» должны быть ALL_UPPER_CASE_SEPARATED_BY_UNDERSCORES
В случае сомнений обратитесь к PEP 8 , исходному тексту Python, существующим соглашениям в базе кода. Но самое важное - быть внутренне согласованным насколько это возможно. По возможности весь код Python должен выглядеть так, как если бы он был написан одним и тем же человеком.