Сообщить об ошибке.

Пробелы в выражениях и операторах языка Python

Как ставить пробелы в выражениях

Содержание:

Избегайте лишних пробелов в следующих ситуациях:

  • Сразу внутри скобок.

    
    

Правильно

spam(ham[1], {eggs: 2})

Неправильно

spam( ham[ 1 ], { eggs: 2 } )


- Между последней запятой и следующей закрывающей скобкой.

    ```python
# Правильно
foo = (0,)
# Неправильно
bar = (0, )
  • Непосредственно перед запятой, точкой с запятой или двоеточием:

    
    

Правильно

if x == 4: print x, y; x, y = y, x

Неправильно

if x == 4 : print x , y ; x , y = y , x


- Однако в срезе двоеточие действует как двоичный оператор и должен иметь равные промежутки с обеих сторон (рассматривая его как оператор с наименьшим приоритетом). В [расширенном срезе][f-slice] оба двоеточия должны иметь одинаковое расстояние между ними. Исключение - когда параметр среза опущен, пробел опущен.

    ```python
# Правильно
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]
```python

Неправильно

ham[lower + offset:upper + offset] ham[1: 9], ham[1 :9], ham[1:9 :3] ham[lower : : upper] ham[ : upper]

- Непосредственно перед открытой скобкой, которая запускает [список аргументов вызова функции][func-args]: ```python # Правильно spam(1) # Неправильно spam (1)
  • Непосредственно перед открытой скобкой, которая указывает на индекс или срез:

    
    

Правильно

dct['key'] = lst[index]

Неправильно

dct ['key'] = lst [index]


- Более одного пространства вокруг оператора присваивания (или другого), чтобы выровнять его с другим.

    ```python
# Правильно
x = 1
y = 2
long_variable = 3
```python

Неправильно

x = 1 y = 2 long_variable = 3

#### <mark>Другие рекомендации:</mark> - Избегайте конечных пробелов в строках, в любом месте. Поскольку он обычно невидим, он может сбивать с толку: например, обратная косая черта, за которой следует пробел, в некоторых [редакторах][ide], не считается переводом строки и отображается только визуально. И многие компиляторы (например, сам CPython) отклоняют его, что приводит к ошибкам. - Всегда окружайте эти [двоичные операторы][compare-var] одним пробелом с обеих сторон: присваивание ( `=` ), расширенное присваивание ( `+=` , `-=` и т. д.), сравнения (`==`, `<`, `>`, `!=`, `<>`, `<=`, `>=`, `in`, `not in`, `is`, `is not`), логические (`and`, `or`, `not`). - Если используются операторы с разными приоритетами, рассмотрите возможность добавления пробелов вокруг операторов с наименьшим приоритетом. Используйте свое собственное суждение; однако никогда не используйте более одного пробела и всегда имейте одинаковое количество пробелов с обеих сторон двоичного оператора. ```python # Правильно i = i + 1 submitted += 1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b)
```python

Неправильно

i=i+1 submitted +=1 x = x * 2 - 1 hypot2 = x * x + y * y c = (a + b) * (a - b)

- [Аннотации функций][func-annotation] должны использовать обычные правила для двоеточий и всегда иметь пробелы вокруг стрелки `->`, если она присутствует. ```python # Правильно def munge(input: AnyStr): ... def munge() -> PosInt: ...
```python

Неправильно

def munge(input:AnyStr): ... def munge()->PosInt: ...

- Не используйте пробелы вокруг знака '=', когда он используется для указания ключевого аргумента или для указания значения по умолчанию для [параметра функции][func-args] без указания имени. ```python # Правильно def complex(real, imag=0.0): return magic(r=real, i=imag) ``` ```python # Неправильно def complex(real, imag = 0.0): return magic(r = real, i = imag) ``` Однако при объединении аннотации [аргумента со значением по умолчанию][func-args-default] используйте пробелы вокруг знака '=' : ```python # Правильно def munge(sep: AnyStr = None): ... def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...
```python

Неправильно

def munge(input: AnyStr=None): ... def munge(input: AnyStr, limit = 1000): ...

- Составные операторы (несколько операторов в одной строке), как правило, не рекомендуется. ```python # Правильно if foo == 'blah': do_blah_thing() do_one() do_two() do_three() ``` ```python # Неправильно if foo == 'blah': do_blah_thing() do_one(); do_two(); do_three() ``` - Хотя иногда можно поставить [`if`][if-else]/[`for`][for-in]/[`while`][while] с небольшим телом на одной строке, никогда не делайте этого для операторов с несколькими условиями. Также избегайте выстраивания таких конструкций в длинные строки! ```python # Неправильно if foo == 'blah': do_blah_thing() for x in lst: total += x while t < 10: t = delay() if foo == 'blah': do_blah_thing() else: do_non_blah_thing() try: something() finally: cleanup() do_one(); do_two(); do_three(long, argument, list, like, this) if foo == 'blah': one(); two(); three() ```