Общий стиль кодирования для 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 цента.