Python: базовые операторы ввода и вывода текста

Самые первые операции с текстом и базовые сведения о Python, которые помогают тут же начать программировать:
- # Comments
- Ограничители » или «» и экранирование символов \’ и \»
- p rint(‘Hello world’) — переход на новую строку
- end=’. ‘ — следующий print склеится
- \ escape-последовательности:
\a — системный динамик
\n — переход на новую строку (пустая строка)
\t — отступ типа tab - + сцепление строк без разделителя
- * повторение строк без разделителя
- \ продолжение строки кода на следующей строке
- input(‘Press Entr to exit’)
- Базовые математические операторы ( + , — , * , / , // , % ).
- Составные операторы присвоения
- Строковые методы (применяются к строке с текстом): I am cat
.upper() I Am CAT
.lower() i am cat
.title() I Am Cat
.replace(old,new,max число замен) заменяет старый текст на новый
.swapcase() меняет регистры наоборот i Am Cat
.capitalize() первая буква большая, остальные строчные I am cat
.strip() строка без интервалов Iamcat
Разберем каждый пункт этого конспекта подробнее, чтобы было проще разобраться что к чему:
1. # Comments
Программу принято начинать с комментариев, в которых указывается название, дата создания кода, автор и другие пометки. Если написать в начале строки символ # а после него вставить любой текст, то компьютер не будет считать этот текст частью программы. Эти комментарии делаются не для компьютера, а для людей, чтобы программисты в будущем могли быстрее разобраться, что к чему.
2. Ограничители » или «»
В языке Python все, что находится внутри оператора, например,
print ( «пишется внутри ограничителей» ) .
Такая программа уже выдаст нам результат:
пишется внутри ограничителей
Ограничители показывают, где начало строки, а где ее конец. Где начинать исполнять код, а где заканчивать. Мы ставим кавычки в начале и в конце, это могут быть как одинарные (апострофы), так и двойные кавычки. Если сам текст внутри ограничителей тоже содержит кавычки, то мы их экранируем обратным слэшем \» или \’ — в этом случае компьютер понимает, что это не конец строки, а просто текст с кавычками».
Так что если мы захотим написать: пишется внутри «ограничителей» , программа будет выглядеть так:
print ( «пишется внутри \»ограничителей\»» ) .
Если нужно задать пустую строку значением переменной, можно написать:
peremennaya = ' '
Если нужно задать пустое значения для переменной, можно написать:
peremennaya = None
3. Выражение print ( ‘Hello world’ ) выводит текст и переводит нас на новую строку.
Все что будет написано дальше мы увидим строкой ниже.
4. Оператор конца строки
Если мы хотим после первого print продолжить писать что-то без перехода на следующую строку, то будем использовать оператор конца строки end=» означает, что ‘внутри ограничителей укажем то, к чему следует «приклеить» следующий print’. Пусть у нас end будет пробелом:
print ( «пишется внутри», end=» «)
print (« ограничителей» )
Такая программа уже выдаст нам уже знакомый результат:
пишется внутри ограничителей
Если убрать end:
print ( «пишется внутри»)
print (« ограничителей» )
Получим результат:
пишется внутри
ограничителей
5. \ escape-последовательности
- либо обратный слэш перед спец-символом (см. пункт 1, где мы экранировали кавычки \’ или \» );
- либо это обратный слэш с буквой:
\a — вызов звука системного динамика;
\n — переход на новую строку (пустая строка);
\t — отступ типа tab.
6. Плюс (+) при работе с текстом.
«Плюс» работает с текстом как сцепление без разделителя.
Если внутри скобок текстовые части складываются, то к одной из них нужно добавить пробел, например, после слова «пишется_»:
print ( «пишется » + «внутри ограничителей» )
Такая программа уже выдаст результат:
пишется внутри ограничителей
7. Знак умножения (*) при работе с текстом.
«Звездочка» работает с текстом как повторение строк без разделителя:
print ( «пишется » *4 )
Программа выдаст результат:
пишетсяпишетсяпишетсяпишется
8. Разделение строки \
Для удобства человеческого восприятия кода, мы можем захотеть разделить длинную строку на несколько частей, располагающихся на разных строках, чтобы компьютер считал это все одной строкой, ставим в месте разделения символ обратного слэша ( \ ), и просто переходим на следующую строку и продолжаем писать там код. Вся строка соединится компьютером в одно выражение.
9. Функция input
Функция input дает возможность принимать текст с клавиатуры, то есть мы можем через выражение input ( ‘Press Entr to exit’ ) — показать пользователю текст Press Entr to exit и ожидать, пока он нажмет Entr, и тогда программа завершится. Это способ интерактивного взаимодействия с человеком, который видит нашу программу. В принципе мы можем принять тот текст, который напишет пользователь и записать его в виде новой переменной, с которой дальше можно как-то оперировать. Но для начала можно оставить все так, и тогда после нажатия Entr вывод функции input закончится.
Пример программы «Знакомство»:
name= input ( ‘What is your name?\n’ )
print ( ‘Hi,’ ,name)

10. Базовые математические операторы
Сложение, вычитание, умножение и другие операторы в Python работают как с цифрами, так и с текстом (см. конкатенация и повторение строк).
Основные операторы и их значение:
+ сложение
— вычитание
* умножение
/ деление
// деление нацело (с остатком). Пример: 10//6=1
% остаток от деления нацело. Пример: 10%6=4
11. Составные операторы присвоения
… позволяют присваивать переменной значение, созданное на основе исходного значения.
Например, у вас было значение a=5, а вы хотите сделать эту же переменную, равной 5+4. В принципе можно просто написать:
a=5 (исходная переменная)
a=5+4 (новое значение переменной)
Для этого есть короткий способ записи:
Таким образом += является составным оператором присвоения. Аналогичным образом работает -= , *= , /= , %= и другие.
12. Строковые методы
…позволяют изменять строки одной командой:
quote= ‘I am cat’
print (quote)
print (quote.upper())
print (quote.lower())
print (quote.capitalize())
print (quote.title())
print (quote.strip())
print (quote.swapcase())
print (quote.replace( ‘cat’ , ‘bear’ ))
Управляющие символы \n \t и прочие
Время от времени в коде вы можете встретить символы типа \n , \r , \t и прочие.
Например, посмотрите что будет, если исполнить следующий код:
print('раз\tдва\tтри\nuno\tdos\ttres')
# раз два три
# uno dos tres
Можно заметить, что вместо \t у нас появился отступ, а вместо \n переход на новую строку.
Символы вроде \t и \n — это управляющие символы, они управляют выводом, например модифицируют его.
Вот некоторые управляющие символы и их смысл:
| \n | (newline) перевод каретки на следующую строку |
| \r | (return) перевод каретки на в начало текущей строки |
| \t | (tab) табуляция (отступ, красная строка) |
| \b | (backspace) перевод каретки на один символ назад |
На заметку
В качестве разделителя строк в разных системах могут использоваться разные последовательности. Например, в Windows строки разделяются при помощи \r\n , а в Unix при помощи \n .
Правила оформления Python-кода
Рекомендуется использовать 4 пробела на каждый уровень отступа. Python 3 запрещает смешивание табуляции и пробелов в отступах. Код, в котором используются и те, и другие типы отступов, должен быть исправлен так, чтобы отступы в нем были расставлены только с помощью пробелов.
def no_tab_using(): no_tab = 'Using 4 spaces'
def use_tab(): one_tab_using = 'Ugly'
2. Точки с запятой
Не разделяйте ваши строки с помощью точек с запятой и не используйте точки с запятой для разделения команд, находящихся на одной строке.
a = 'String' b = 15 c = 7.2
a = 'String'; b = 15; c = 7.2;
3. Скобки
Используйте скобки экономно. Не используйте их с выражением return или с условной конструкцией, если не требуется организовать перенос строки. Однако скобки хорошо использовать для создания кортежей.
if budget < 0: return False # ------------------- while counter
if (budget < 0): return (False) # ------------------- if not(line): continue # ------------------- return (result)
4. Пробелы в выражениях и инструкциях
4.1 Пробелы и скобки
4.1.1 Не ставьте пробелы внутри каких-либо скобок (обычных, фигурных и квадратных).
pineapple(pine[1], )
pineapple( pine[ 1 ], < apple: 2 >)
4.1.2 Никаких пробелов перед открывающей скобкой, которая начинает список аргументов, индекс или срез.
get_number_of_guests(1)
get_number_of_guests (1)
dish['ingredients'] = cook_book[:3]
dish ['ingredients'] = cook_book [:3]
4.2 Пробелы рядом с запятой, точкой с запятой и точкой
4.2.1 Перед запятой, точкой с запятой либо точкой не должно быть никаких пробелов. Используйте пробел после запятой, точки с запятой или точки (кроме того случая, когда они находятся в конце строки).
if number_of_goods == 4: print(number_of_goods, total_price)
if number_of_goods == 4 : print(number_of_goods , total_price)
4.3 Пробелы вокруг бинарных операторов
4.3.1 Окружайте бинарные операторы одиночными пробелами с каждой стороны. Это касается присваивания ( = ), операторов сравнения ( == , , > , != , <> , , >= , in , not in , is , is not ), и булевых операторов ( and , or , not ). Используйте, как вам покажется правильным, окружение пробелами по отношению к арифметическим операторам, но расстановка пробелов по обеим сторонам бинарного оператора придает целостность коду.
counter == 1
counter
4.3.2 Не используйте более одного пробела вокруг оператора присваивания (или любого другого оператора) для того, чтобы выровнять его с другим.
price = 1000 price_with_taxes = 1200 price_with_taxes_and_discounts = 1100
price = 1000 price_with_taxes = 1200 price_with_taxes_and_discounts = 1100
4.3.3 Не используйте пробелы по сторонам знака = , когда вы используете его, чтобы указать на именованный аргумент или значение по умолчанию.
def complex(real, imag=0.0): return magic(r=real, i=imag)
def complex(real, imag = 0.0): return magic(r = real, i = imag)
5. Длина строк
Ограничивайте длину строк 79 символами (а длину строк документации и комментариев — 72 символами). В общем случае не используйте обратный слеш в качестве перехода на новую строку. Используйте доступное в Python явное объединение строк посредством круглых и фигурных скобок. Если необходимо, можно добавить дополнительную пару скобок вокруг выражения.
style_object(self, width, height, color='black', design=None, emphasis=None, highlight=0) if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong'):
Если ваш текст не помещается в одну строку, используйте скобки для явного объединения строк.
long_string = ('This will build a very long long ' 'long long long long long long string')
Что касается длинных URL в комментариях, то располагайте их, если это необходимо, на одной строке.
# See details at # http://www.example.com/example/example/example/example/example/example/example_example.html
# See details at # http://www.example.com/example/example/example/example/example/\ # example/example_example.html
Обратный слеш иногда используется. Например, с длинной конструкцией with для переноса блока инструкций.
with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read())
Ещё один подобный случай — длинные assert .
6. Пустые строки
Отделяйте функции (верхнего уровня, не функции внутри функций) и определения классов двумя пустыми строками. Определения методов внутри класса отделяйте одной пустой строкой. Две пустые строки должны быть между объявлениями верхнего уровня, будь это класс или функция. Одна пустая строка должна быть между определениями методов и между объявлением класса и его первым методом.
import os . . class MyClass: . def __init__(self): self.name = 'My name' . def f(self): return 'hello world' . . def MyFunc(): i = 12345 return i . myclass = MyClass()
Используйте (без энтузиазма) пустые строки в коде функций, чтобы отделить друг от друга логические части.
Python расценивает символ control+L как незначащий (whitespace), и вы можете использовать его, потому что многие редакторы обрабатывают его как разрыв страницы — таким образом, логические части в файле будут на разных страницах. Однако не все редакторы распознают control+L и могут на его месте отображать другой символ.
7. Имена
Имена, которых следует избегать:
-
Односимвольные имена, исключая счетчики либо итераторы. Никогда не используйте символы l (маленькая латинская буква «эль»), O (заглавная латинская буква «о») или I (заглавная латинская буква «ай») как однобуквенные идентификаторы. В некоторых шрифтах эти символы неотличимы от цифры один и нуля. Если очень нужно l , пишите вместо неё заглавную L . Хорошо
long_name = 'Хорошее имя переменной' L = 'Допустимо, но лучше избегать'
l = 1 I = 1 O = 0
import my_module
import my-module
my_variable = 'Variable'
__myvariable__ = 'Variable'
7.1 Имена функций
Имена функций должны состоять из маленьких букв, а слова разделяться символами подчеркивания — это необходимо, чтобы увеличить читабельность.
my_variable = 'Variable'
My-Variable = 'Variable'
Стиль mixedCase допускается в тех местах, где уже преобладает такой стиль — для сохранения обратной совместимости.
7.2 Имена модулей и пакетов
Модули должны иметь короткие имена, состоящие из маленьких букв. Можно использовать символы подчёркивания, если это улучшает читабельность. То же самое относится и к именам пакетов, однако в именах пакетов не рекомендуется использовать символ подчёркивания.
Так как имена модулей отображаются в имена файлов, а некоторые файловые системы являются нечувствительными к регистру символов и обрезают длинные имена, очень важно использовать достаточно короткие имена модулей — это не проблема в Unix, но, возможно, код окажется непереносимым в старые версии Windows, Mac, или DOS.
import vkapi
import My-First-VKontakte-API-Modul
7.3 Имена классов
Все имена классов должны следовать соглашению CapWords почти без исключений.
class MyFirstClass:
Иногда вместо этого могут использоваться соглашения для именования функций, если интерфейс документирован и используется в основном как функции.
Обратите внимание, что существуют отдельных соглашения о встроенных именах: большинство встроенных имен — одно слово (либо два слитно написанных слова), а соглашение CapWords используется только для именования исключений и встроенных констант.
Так как исключения являются классами, к исключениями применяется стиль именования классов. Однако вы можете добавить Error в конце имени (если, конечно, исключение действительно является ошибкой).
7.4 Имена констант
Константы обычно объявляются на уровне модуля и записываются только заглавными буквами, а слова разделяются символами подчеркивания.
MAX_OVERFLOW = 10 TOTAL = 100
8. Комментарии
Комментарии, противоречащие коду, хуже, чем отсутствие комментариев. Всегда исправляйте комментарии, если меняете код!
Комментарии должны быть законченными предложениями. Если комментарий — фраза или предложение, первое слово должно быть написано с большой буквы, если только это не имя переменной, которая начинается с маленькой буквы (никогда не отступайте от этого правила для имен переменных).
Ставьте два пробела после точки в конце предложения.
Если вы — программист, не говорящий по-английски, то всё равно следует использовать английский язык для написания комментариев. Особенно, если нет уверенности на 120% в том, что этот код будут читать только люди, говорящие на вашем родном языке.
8.1 Блоки комментариев
Блок комментариев обычно объясняет код (весь или только некоторую часть), идущий после блока, и должен иметь тот же отступ, что и сам код. Каждая строчка такого блока должна начинаться с символа # и одного пробела после него (если только сам текст комментария не имеет отступа).
Абзацы внутри блока комментариев разделяются строкой, состоящей из одного символа # .
8.2 Комментарии в строке с кодом
Старайтесь реже использовать подобные комментарии.
Такой комментарий находится в той же строке, что и инструкция. «Встрочные» комментарии должны отделяться хотя бы двумя пробелами от инструкции. Они должны начинаться с символа # и одного пробела.
Комментарии в строке с кодом не нужны и только отвлекают от чтения, если они объясняют очевидное.
counter = counter + 1 # Increment counter
8.3 Строки документации
Соглашения о написании хорошей документации (docstrings) зафиксированы в PEP 257.
Пишите документацию для всех публичных модулей, функций, классов, методов. Строки документации необязательны для приватных методов, но лучше написать, что делает метод. Комментарий нужно писать после строки с def .
Очень важно, чтобы закрывающие кавычки стояли на отдельной строке. А еще лучше, если перед ними будет ещё и пустая строка.
"""Return something useful Optional plotz says to frobnicate the bizbaz first. """
Для однострочной документации можно оставить """ на той же строке.
9. Циклы
9.1 Циклы по спискам
Если нам необходимо в цикле пройти по всем элементам списка, то хорошим тоном (да и более читаемым) будет такой способ:
colors = ['red', 'green', 'blue', 'yellow'] for color in colors: print(color)
И хотя бывалые программисты или просто любители C могут использовать и такой код, это моветон.
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print(colors[i])
А если нужно пройти по списку задом наперед, то лучше всего использовать метод reversed:
colors = ['red', 'green', 'blue', 'yellow'] for color in reversed(colors): print(color)
Вместо того чтобы писать избыточный код, который и читается-то не очень внятно.
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)-1, -1, -1): print(colors[i])
9.2 Циклы по списку чисел
Если есть необходимость пройти в цикле по ряду чисел, то метод range будет намного приемлемее, как минимум потому, что этот метод потребляет намного меньше памяти, чем вариант в блоке "Плохо". А представьте, что у вас ряд из трёх миллиардов последовательных чисел!
for i in range(6): print(i**2)
for i in [0, 1, 2, 3, 4, 5]: print(i**2)
9.3 Циклы по спискам с индексами
Метод enumerate позволяет получить сразу индекс и значение из списка, что, во-первых, предоставляет множество возможностей для дальшнейшего проектирования, а во-вторых, такой код легче читается и воспринимается.
colors = ['red', 'green', 'blue', 'yellow'] for i, color in enumerate(colors): print(i, '-->', color)
colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print(i, '-->', colors[i])
9.4 Циклы по двум спискам
Используя метод zip, мы получаем из двух списков один список кортежей, что более удобно для дальнейшего использования и требует меньше памяти. Да и просто этот вариант более элегантный.
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in zip(names, colors): print(name, '-->', color)
names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] n = min(len(names), len(colors)) for i in range(n): print(names[i], '-->', colors[i])
10. Импорты
Каждый импорт, как правило, должен быть на отдельной строке.
import os import sys
import sys, os
В то же время, можно писать так:
from subprocess import Popen, PIPE
Импорты всегда располагаются в начале файла, сразу после комментариев уровня модуля, строк документации, перед объявлением констант и объектов уровня модуля. Импорты должны быть сгруппированы в порядке от самых простых до самых сложных:
- импорты из стандартной библиотеки,
- сторонние импорты,
- импорты из библиотек вашего приложения.
Наряду с группированием, импорты должны быть отсортированы лексикографически, нерегистрозависимо, согласно полному пути до каждого модуля.
import foo from foo import bar from foo.bar import baz from foo.bar import Quux from Foob import ar
Рекомендуется абсолютное импортирование, так как оно обычно более читаемо и ведет себя лучше (или, по крайней мере, даёт понятные сообщения об ошибках), если импортируемая система настроена неправильно (например, когда каталог внутри пакета заканчивается на sys.path ).
import mypkg.sibling from mypkg import sibling from mypkg.sibling import example
Тем не менее, явный относительный импорт является приемлемой альтернативой абсолютному импорту, особенно при работе со сложными пакетами, где использование абсолютного импорта было бы излишне подробным.
from . import sibling from .sibling import example
Следует избегать шаблонов импортов ( from import * ), так как они делают неясным то, какие имена присутствуют в глобальном пространстве имён, что вводит в заблуждение как читателей, так и многие автоматизированные средства.
Рекомендуем также ознакомиться с полной версией соглашения о том, как писать код на Python (PEP 8)
Разметка кода Python, PEP 8
Последующие строки обернутых элементов в скобки должны быть выравнены либо по вертикали, либо с помощью висящего отступа.
При использовании висячего отступа, следует учитывать следующее: в первой строке не должно быть аргументов, и следует использовать дополнительный отступ, чтобы четко отличить себя как строку продолжения.
Правильно:
# Выравнивается с разделителем открытия. foo = long_function_name(var_one, var_two, var_three, var_four) # Добавьте 4 пробела (дополнительный уровень отступа), # чтобы отличить аргументы. def long_function_name( var_one, var_two, var_three, var_four): print(var_one) # У висячих строк должны быть отступы. foo = long_function_name( var_one, var_two, var_three, var_four)
Не правильно:
#Аргументы в первой строке запрещены, если не используется вертикальное выравнивание. foo = long_function_name(var_one, var_two, var_three, var_four) # Требуется дополнительное отступы, так как аргументы сливаются с кодом. def long_function_name( var_one, var_two, var_three, var_four): print(var_one)
Правило 4 пробелов не является обязательным для строк продолжения.
По желанию:
# Висячие отступы могут иметь отступы, отличные от 4 пробелов. foo = long_function_name ( var_one, var_two, var_three, var_four)
Когда условная часть if достаточно длинная (более 79 символов) и мы должны записать ее в несколько строк, стоит отметить, что сочетание двухсимвольного ключевого слова (например, if ), одного пробела и открывающей скобки, при переносе, создает естественный отступ в 4 символа для последующих строк. Это может привести к визуальному конфликту с дальнейшим набором кода, вложенным в конструкцию if, которое также будет иметь отступ в 4 пробела. Этот PEP не занимает явной позиции о том, как следует дополнительно визуально отличать такие строки от вложенного кода внутри конструкции if . Приемлемые варианты в этой ситуации можно посмотреть в примерах ниже, но не ограничиваться этим:
# Никаких дополнительных отступов, код в конструкции if # сливается с условием, что затрудняет чтение кода if (this_is_one_thing and that_is_another_thing): do_something()
# Добавить комментарий, который обеспечит некоторое различие # в редакторе при помощи подсветки синтаксиса. if (this_is_one_thing and that_is_another_thing): # Так как . do_something()
# Добавьте дополнительный отступ в строке условного продолжения. if (this_is_one_thing and that_is_another_thing): do_something()
Закрывающая скобка в многострочных конструкциях может располагаться либо под первым символом последней строки списка:
my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments ( 'a', 'b', 'c', 'd', 'e', 'f', )
или может быть на уровне первого символа строки, которая начинает многострочную конструкцию:
my_list = [ 1, 2, 3, 4, 5, 6, ] result = some_function_that_takes_arguments ( 'a', 'b', 'c', 'd', 'e', 'f', )
TAB или пробелы?
Пробелы являются предпочтительным методом отступа.
Табуляция должна использоваться исключительно для соответствия с кодом, который уже имеет такие отступы.
Python 3 запрещает смешивать использование табуляции и пробелов для отступа. Код с отступом в виде комбинации символов табуляции и пробелов должен быть преобразован исключительно в пробелы.
При вызове интерпретатора командной строки Python 2 с параметром -t выдает предупреждения о коде, который смешивает табуляции и пробелы. При использовании -tt эти предупреждения становятся ошибками. Эти варианты настоятельно рекомендуются!
Максимальная длина строки с кодом:
Ограничьте все строки максимум 79 символами.
Для строк документации или комментариев длина строки должна быть ограничена 72 символами.
Ограничение ширины окна редактора позволяет одновременно открывать несколько файлов и хорошо работает при использовании инструментов обзора, которые представляют две версии кода в соседних окнах.
Перенос по умолчанию в большинстве редакторов нарушает визуальную структуру кода, что делает его более трудным для понимания. Данные ограничения приняты для того, чтобы избежать автоматического переноса строк в редакторах с шириной окна, установленной на 80 символов, даже если он помещает маркер курсора в последний столбец. Некоторые IDE могут вообще не иметь авто-переноса строк.
Некоторые команды разработчиков предпочитают более длинные строки при написании кода. Исключительно для поддержания такого кода внутри команды, разрешается увеличить ограничение длины строки до 99 символов, при условии, что комментарии и документация должна быть ограничена 72 символами
Стандартная библиотека Python консервативна и требует ограничения строки до 79 символов (и строки документации/комментариев до 72).
Предпочтительный способ переноса длинных строк - это использование показанного выше переноса кода внутри скобок. Длинные строки можно разбить на несколько строк, заключив выражения в скобки.
income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
Если такое не возможно, например, длинные строковые параметры в аргументах функций, то допустимо использование обратного слеша \ .
with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read())
Еще один такой случай возможен с assert утверждениями.
Удостоверьтесь, что сделали отступ в 4 пробела для продолжения строки кода.
Перенос строки до или после двоичного оператора?
В течение десятилетий рекомендуется переносить строки после двоичного оператора. Но это может усложнить читабельность. При таком переносе, операторы, как правило, разбросаны по разным столбцам, при этом каждый оператор отошел от своей переменной и перешел на предыдущую строку. Здесь глаз должен сделать дополнительную работу, чтобы увидеть, какие элементы добавляются, а какие вычитаются:
# Неправильно: # операторы сидят далеко от своих операндов income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
Чтобы решить проблему читаемости, математики следуют противоположному соглашению. Следуя традиции математики, обычно получается более читаемый код:
# Правильно: # легко сопоставлять операторы с операндами income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
В коде Python допускается перенос до или после двоичного оператора, если есть такое соглашение. Для нового кода предлагается математический стиль.
Пустые строки:
Определения функций и классов верхнего уровня должны быть заключены в две пустые строки.
Определения методов внутри класса заключены в одну пустую строку.
Дополнительные пустые строки могут использоваться для разделения групп связанных функций. Пустые строки могут быть пропущены между связкой связанных строк (например, набором фиктивных реализаций).
Используйте пустые строки в функциях, чтобы указать логические разделы.
Python принимает символ перевода формы control-L (т.е. ^ L ) в качестве пробела. Многие инструменты обрабатывают эти символы как разделители страниц, поэтому, вы можете использовать их для разделения страниц связанных разделов вашего файла. Обратите внимание, что некоторые редакторы и IDE могут не распознавать control-L .
Кодировка файла с кодом:
Код в основном дистрибутиве Python всегда должен использовать UTF-8 (или ASCII в Python 2).
Файлы, использующие ASCII (в Python 2) или UTF-8 (в Python 3), не должны иметь декларации кодировки.
В стандартной библиотеке, кодировки, отличные от заданных по умолчанию, следует использовать только для целей тестирования или в тех случаях, когда в комментариях или строке документации необходимо упомянуть имя автора, содержащее символы, отличные от ASCII. В противном случае использование \x , \u , \U или \N escape-файлов является предпочтительным способом включения данных не-ASCII в строковые литералы.
Для Python 3.0 и выше, для стандартной библиотеки предписана следующая политика. Все идентификаторы в стандартной библиотеке Python ДОЛЖНЫ использовать идентификаторы только ASCII и ДОЛЖНЫ использовать английские слова везде, где это возможно (сокращения и технические термины, которые не являются английскими). Кроме того, все строковые литералы и комментарии также должны быть в ASCII.
Единственными исключениями являются:
- Контрольные примеры, тестирующие функции, отличные от ASCII,
- Имена авторов. Авторы, чьи имена не основаны на латинском алфавите, ДОЛЖНЫ обеспечить транслитерацию своих имен.
Проектам с открытым исходным кодом с глобальной аудиторией рекомендуется придерживаться аналогичной политики.
Импорт:
Импорт обычно должен быть в отдельных строках:
# Правильно: import os import sys # Неправильно: import sys, os
Это нормально, хотя:
from subprocess import Popen, PIPE
Импорт всегда помещается вверху файла, сразу после любых комментариев и строк документации, а также перед глобальными переменными и константами модуля.
Импорт должен быть сгруппирован в следующем порядке:
- Импорт стандартной библиотеки.
- Связанный импорт третьей стороны.
- Локальный импорт приложений или библиотек.
Вы должны поставить пустую строку между каждой группой импорта.
Рекомендуется абсолютный импорт, так как он обычно более читабелен и, как правило, ведет себя лучше (или, по крайней мере, дает лучшие сообщения об ошибках), если система импорта настроена неправильно (например, когда каталог внутри пакета заканчивается в sys.path ):
import mypkg.sibling from mypkg import sibling from mypkg.sibling import example
Однако явный относительный импорт является приемлемой альтернативой абсолютному импорту, особенно когда речь идет о сложном макете в пакете, где использование абсолютного импорта было бы излишне многословным:
from . import sibling from .sibling import example
Код стандартной библиотеки должен избегать сложных макетов пакетов и всегда использовать абсолютный импорт.
Неявный относительный импорт никогда не должен использоваться и был удален в Python 3.
При импорте класса из модуля, обычно можно записать следующее:
from myclass import MyClass from foo.bar.yourclass import YourClass
Если это написание вызывает локальные конфликты имен, то запишите импорт через точку:
import myclass import foo.bar.yourclass
и используйте myclass.MyClass и foo.bar.yourclass.YourClass .
Следует избегать импорта подстановочных знаков ( from import * ), так как из-за этого неясно, какие имена присутствуют в пространстве имен, запутывает как читателей, так и многие автоматизированные инструменты. Существует один оправданный вариант использования для импорта с использованием подстановочного знака, который заключается в повторной публикации внутреннего интерфейса как части общедоступного API.
При повторной публикации имен, все же применяются приведенные ниже рекомендации, касающиеся открытых и внутренних интерфейсов.
Расположение имен "dunders" в коде:
Имена "dunders" (имена с двумя начальными и двумя замыкающими подчеркиваниями), такие как __all__ , __author__ , __version__ и т. ., Должны быть помещены после строки документации модуля, но перед любыми операторами импорта, кроме __future__ . Python предписывает, что в __future__ импорт должен стоять перед любым другим кодом, кроме строк документации:
"""This is the example module. This module does stuff. """ from __future__ import barry_as_FLUFL __all__ = ['a', 'b', 'c'] __version__ = '0.1' __author__ = 'Cardinal Biggles' import os import sys
Кавычки в строках:
В Python одинарные и двойные кавычки функционально одинаковы. PEP не дает рекомендации какие из них предпочтительнее. Выберите правило и придерживайтесь его. Если, например, строка содержит одинарные кавычки, чтобы избежать обратной косой черты в строке, используйте дополнительно двойные кавычки. Это улучшает читаемость.
Для строк с тройными кавычками всегда используйте символы двойной кавычки, чтобы соответствовать соглашению с документированной строкой в PEP 257.
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Разметка кода Python, PEP 8
- Пробелы в выражениях и операторах языка Python
- Когда использовать запятые в коде на Python
- Комментарии в коде языка Python
- Соглашения об именах
- Рекомендации по программированию на Python