Подтвердить что ты не робот

Как я могу заставить код Python оставаться под 80 символами?

Я написал некоторый Python, в котором некоторые строки превышают 80 символов в длину, что является порогом, которым я должен оставаться. Как я могу адаптировать мой код для сокращения длины строк?

4b9b3361

Ответ 1

Мой текущий редактор (Kate) был настроен так, чтобы вводить разрыв строки на границах слов всякий раз, когда длина строки достигает или превышает 80 символов. Отсюда сразу становится очевидным, что я перешагнул границы. Кроме того, есть красная линия, обозначающая позицию 80 символов, давая мне предварительное предупреждение о том, когда линия будет перетекать. Это позволяет мне планировать логические строки, которые будут соответствовать множеству физических линий.

Что касается того, как правильно их подстраивать, существует несколько механизмов. Вы можете закончить строку с помощью \, но это ошибка.

# works
print 4 + \
    2

# doesn't work
print 4 + \ 
    2

Разница? Разница невидима - после обратной косой черты во втором случае был символ пробела. К сожалению,

Что следует делать вместо этого? Ну, окружите его в круглых скобках.

print (4 + 
    2)

Нет необходимости. Это действительно работает повсеместно, вам никогда не понадобится \. Даже для границ доступа к атрибутам!

print (foo
    .bar())

Для строк вы можете добавлять их явно или неявно с помощью соединения в стиле C.

# all of these do exactly the same thing
print ("123"
    "456")
print ("123" + 
    "456")
print "123456"

Наконец, все, что будет в любой форме скобки ((), []. {}), а не только в скобках, в частности, может иметь разрыв строки в любом месте. Так, например, вы можете использовать литерал списка над несколькими строками просто отлично, если элементы разделены запятой.

Все это и многое другое можно найти в официальной документации для Python. Кроме того, быстрое примечание PEP-8 определяет 79 символов как предел, а не 80--, если у вас есть 80 символов, вы уже закончили его.

Ответ 2

Если код, превышающий 80 символов, является вызовом функции (или определением), разбейте строку аргумента. Python распознает скобки и видит это как одну строку.

function(arg, arg, arg, arg,
         arg, arg, arg...)

Если код, превышающий 80 символов, представляет собой строку кода, которая не является естественным образом разрушаемой, вы можете использовать обратную косую черту \ для "escape" новой строки.

some.weird.namespace.thing.that.is.long = ','.join(strings) + \
                                          'another string'

Вы также можете использовать скобки в своих интересах.

some.weird.namespace.thing.that.is.long = (','.join(strings) +
                                           'another string')

Все типы скобок {} (dict/set), [] (list),() (кортежи) могут быть разбиты на несколько строк без проблем. Это позволяет лучше форматировать.

mydict = {
    'key': 'value',
    'yes': 'no'
}

Ответ 3

Idiomatic Python говорит:

Использовать обратную косую черту как последнее средство

Итак, если использовать круглые скобки (), избегайте обратных косых черт. Если у вас есть a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines.across.the.whole.trainyard.and.several.states() сделать что-то вроде:

lines = a.train.wreck.that.spans.across.a.dozen.cars.and-multiple.lines
lines.across.the.whole.trainyard.and.several.states()

Или, желательно, реорганизовать свой код. Пожалуйста.

Ответ 4

Я бы добавил два пункта к предыдущим ответам:

Строки могут быть автоматически объединены, что очень удобно:

this_is_a_long_string = ("lkjlkj lkj lkj mlkj mlkj mlkj mlkj mlkj mlkj "
                         "rest of the string: no string addition is necessary!"
                         " You can do it many times!")

Обратите внимание, что это эффективно: это не приводит к конкатенации строк, вычисляемой при запуске кода: вместо этого это напрямую рассматривается как один длинный строковый литерал, поэтому он эффективен.

Небольшое предостережение, касающееся ответа Девина: синтаксис "круглых скобок" на самом деле не "работает универсально". Например, d [42] = "H22G" нельзя записать как

(d
 [42] = "H2G2")

потому что круглые скобки могут использоваться только вокруг "вычисленного" выражения (это не включает присваивание (=), как указано выше).

Другой пример - следующий код, который генерирует синтаксическую ошибку:

with (open("..... very long file name .....")
      as input_file):

На самом деле, круглые скобки нельзя ставить вокруг утверждений, в более общем смысле (только выражения).

В этих случаях можно использовать синтаксис "\" или, что лучше (поскольку "\" следует избегать, если возможно), разделить код на несколько операторов.