... почему в Python существует другое правило для пустых строк между интерактивной подсказкой и когда программа запускается из оболочки
Поскольку интерпретатор пытается выполнить, как тольковы нажимаете return, но ей нужна пустая строка, чтобы узнать вашу функцию, цикл, если оператор или другой отступ блока завершен.Если вы пишете функцию, она не нужна (на самом деле не будет работать), если вы добавите пустые строки перед последней строкой функции.В этом случае пустая строка необходима для обозначения конца функции.
Вы можете выполнить сценарий без пустых строк из оболочки, например,
for i in range(3):
print i
a = 1000
print a
Будет выдано
$ python test.py
0
1
2
1000
Но если вы вставите это в интерпретатор,вы получите
>>> for i in range(3):
... print i
... a = 1000
File "<stdin>", line 3
a = 1000
^
SyntaxError: invalid syntax
>>> print a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
Если добавить пустую строку для обозначения конца цикла
for i in range(3):
print i
a = 1000
print a
и вставить ее в интерпретатор,
>>> for i in range(3):
... print i
...
0
1
2
>>> a = 1000
>>> print a
1000
И эта пустая строка должна быть пустой, даже пробелы (возможно, автоматически добавленные вашим редактором) приведут к сбою интерпретатора.
Если вы хотите вставить класс в интерпретатор, то вам не нужны пробелы между строками, в том числе между методами.Это вызывает конфликт с PEP8, но это означает, что вы можете либо соблюдать PEP8, либо быть совместимым с переводчиком, но не оба.
Таким образом, если вы хотите иметь возможность копировать и вставлять свой код в стандартный интерпретатор Python, вам потребуется немного другой набор правил.
- Окружающие определения функций и классов верхнего уровня с двумя пустыми строками.
- Пустая строка необходима для кода модуля верхнего уровня (вне функции или класса) для завершения блока с отступом, такой как цикл for, try / исключением или оператор if.
- Пустые строки нельзя использовать внутри функции, класса или метода (за исключением \ или #).
Придерживайтесь этих, и у вас сохранится возможность вставлять в переводчик.Однако для класса вы не будете строго PEP8, так как пустая строка обязательна до и после метода.