Общий стиль кодирования для 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. - Я могу использовать "импорт whatever.function в качестве вздора"?
Я видел некоторые документы то игнорирование, делающее это.

5. - Вкладки или пробелы для расположения с отступом?
В настоящее время использование 4 вкладок пробелов.

6. - Переменный стиль именования? Я использую нижний регистр для всего кроме классов, которые я вставил Camel-регистр.

Что-нибудь Вы рекомендовали бы?

11
задан Oscar Carballal 12 May 2010 в 00:02
поделиться

3 ответа

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.

Почти все называют классы прописными буквами, а константы - прописными.

19
ответ дан 3 December 2019 в 05:12
поделиться

Поскольку я действительно помешан на "стилизации", я напишу руководящие принципы, которые я сейчас использую в проекте размером почти 8k SLOC с примерно 35 файлами, большая часть которых соответствует PEP8.

  1. PEP8 говорит 79 (WTF?), я использую 80 и уже привык к этому. Меньше движения глаз, в конце концов!

  2. Docstrings и прочее, что занимает несколько строк, в '''. Все остальное в '''. Также мне не нравятся двойные кавычки, я все время использую только одинарные... наверное, это потому, что я пришел из JavaScript, где проще использовать '', потому что так не нужно экранировать все HTML-штучки :O

  3. В голове, встроенной перед пользовательским кодом приложения. Но я также придерживаюсь подхода "провалиться раньше", так что если есть что-то, что зависит от версии (например, GTK), я импортирую это первым.

  4. Зависит, в большинстве случаев я использую import foo и from foo import, но в некоторых случаях (например, имя уже определено другим импортом) я использую from foo import bar как bla.

  5. 4 Пробела. Точка. Если вы действительно хотите использовать табуляцию, обязательно преобразуйте ее в пробелы перед фиксацией при работе с SCM. НО НИКОГДА(!) НЕ СМЕШИВАЙТЕ ТАБУЛЯЦИЮ И ПРОБЕЛЫ!!! Это может И БУДЕТ приводить к ужасным ошибкам.

  6. 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
ответ дан 3 December 2019 в 05:12
поделиться

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 должен выглядеть так, как если бы он был написан одним и тем же человеком.

2
ответ дан 3 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: