Идеальный код на Python
Главная ошибка новичка: он пишет код и не думает о том, что его будет кто-то читать. Более того, он не берет в расчет, что сам будет вникать в эти строки спустя день, неделю или год. Новичок решает другую задачу: пишет код, который будет работать.
Проблема в том, что если работодатель видит код, но не может сразу его прочитать, остальное уже не важно. Сотрудник с таким стилем кодинга будет создавать проблемы для коллег — значит, компании он не нужен.
У нас уже вышла публикация о том, как написать код для собеседования и получить работу. Мы пошли дальше и задали вопросы об идеальном коде декану Python-факультета GeekUniversity Алексею Петренко. Он рассказал, что в коде выдает джуниора.

Отступы: все разные
В современных языках программирования существует правило: для выделения самостоятельных смысловых логических блоков используют отступы от начала строки. Python ушел дальше всех: отступ является непосредственным атрибутом этого языка программирования, это часть синтаксиса.
Что новички делают не так
- Неправильно выставляют отступы — их код просто не работает.
- Используют неодинаковое количество отступов: в одной функции — два пробела, в другой — все шесть.
- Используют разные клавиши, чтобы создать отступ: в одной функции — клавишу табуляции, в другой — два пробела.
Из-за разных отступов код смотрится некрасиво, а Python ругает за неудачное сочетание пробелов и табуляций.
Решение
Хороший тон — делать отступ четырьмя нажатиями пробела.
Современные среды разработки — например, PyCharm — упрощают жизнь программиста. Нажав клавишу табуляции, автоматически получаете четыре пробела. Вуаля: код оформлен в общепризнанном стиле.

Для языка Python разработан официальный документ PEP-8, в котором прописаны правила красивого кода. Это соглашение всех программистов мира, которые пишут на Python, о том, какой код считать образцовым.
Переменные: непонятные
Рабочий код должен быть читаемым и ясным без личного присутствия автора. Потрудитесь дать понятные имена всем переменным, методам, функциям, которые используете в коде.
Что новички делают не так
- Используют в качестве переменных обычные буквы алфавита: a, b, c, d, — не задумываясь о смысловой нагрузке.
- Называют все переменные любимой буквой, добавляя цифры: а1, а2, а3. Если переменных двадцать, то будет и а20. Понять, какую информацию они хранят, очень сложно.
- Используют строчную переменную l. Разработчики стараются избегать эту букву. Ее не принято использовать не только в Python, но и в других языках программирования, потому что при быстром чтении кода строчную l легко спутать с единицей. Аналогичная путаница возникает с O и 0.
- Записывают переменные транслитом (massiv вместо array).
- Придумывают новые переменные для общепринятых: для названия цикла (в цикле используют переменные i, j, k — именно в таком порядке, от внешнего i до вложенного k), для обозначения осей координат (x, y).
Решение
Очередное правило хорошего кода: каждая переменная должна говорить о том, что она хранит. Для записи информации о человеке логично создать переменную name. Для возраста — age. Заглядывайте в онлайн-словари, чтобы называть переменные правильными английскими словами, понятными большинству программистов в мире. Идеальная переменная понятна и легко читается:
- Если название переменной состоит из нескольких слов, используйте в Python нижнее подчеркивание: переменная со значением максимального размера — max_size.
- Если именуете класс, записывайте каждое слово с заглавной буквы: имя_переменной должно отличаться от ИмениКласса.
Особенность языка Python в том, что он интерпретируемый. Программа не отслеживает, какие имена дает программист переменным, и примет любое имя, даже название функции.
Из этого вытекает еще одна ошибка новичков: они называют переменные так же, как функции.
В Python есть около 70 функций «из коробки»: функция sum() вычисляет сумму всех переданных аргументов, max() ищет максимальное значение. Если программист назовет переменную sum, она будет работать. Но такой переменной он переопределит функцию суммирования — и она сломается.

Пустые строки: отсутствуют или в избытке
Как правило, код джуниора идет сплошным текстом: в каждой строке — очередная строка кода.
Что новички делают не так
- Не разделяют строки кода пустыми строками.
- Отделяют каждую строчку кода пустой строкой.
В обоих случаях код очень сложно прочитать.
Решение
Код принято делить на логические блоки.
К примеру, если запрашивают информацию о пользователе, пишут несколько строк кода и оставляют одну пустую после блока.
Далее идет блок обработки информации. Если он содержит несколько подблоков, их тоже следует отделить пустой строкой.
Перед выводом информации в конце также добавляют пустую строку.

Слишком сжатый код
Что новички делают не так
- Пытаются написать код максимально сжато и для этого помещают несколько составных операций в одну строку.
Такой код сложно отлаживать в больших проектах: его трудно читать, приходится разбираться в том, как он работает.
Решение
Если есть возможность, распишите несколько составных действий в отдельные строки. Лучше потратить две минуты сейчас и сэкономить двадцать минут на чтение этого кода в будущем.
Советы декана начинающим разработчикам
- Ваш код будут читать другие программисты. Всегда думайте о том, как они его воспримут, насколько он будет понятен коллегам.
- Потратьте время на изучение синтаксиса, почитайте стандарты PEP8. Есть англоязычная версия и перевод. Работодатель будет встречать «по одежке»: ваш код должен выглядеть красиво.
- Если Python — не первый для вас язык программирования, повторяйте требования стиля. Когда разработчик пишет, не соблюдая их, возникает путаница: то ли перед нами человек, у которого в голове перемешались все языки программирования, то ли новичок, который вообще ничего не знает о Python.
- Воспользуйтесь командой import this. Это пасхалка от разработчиков: она выводит свод правил хорошего кода. Почаще перечитывайте этот Дзен Python — и ваш код будет идеален.
Придерживаясь этих советов, вы быстро научитесь писать код, который устроит вас, коллег и работодателя.
Основные команды Python — полное описание с примерами

Сегодня Python вошел в число самых популярных языков программирования в мире. Этот интерпретируемый язык высокого уровня общего назначения был разработан Гвидо ван Россумом в 1991 году и с тех пор неуклонно набирал репутацию среди пользователей.
Синтаксис Python схож с английским, что делает его крайне доступным и простым в освоении для новичков. Команды языка программирования Python просты в использовании, легко пишутся и запоминаются. В этой шпаргалке для тех, кто начинает изучать «змеиный язык», мы разберем синтаксис и назначение основных команд Python.
Важно! Согласно официальной документации, в Python нет самого понятия «команды», но есть различные встроенные методы или функции, которые можно выполнять в оболочке языка, как обычные команды. Поэтому в данном справочнике команд Python, мы будем использовать термины «команды», «функции» и «методы» (специальные классы функций) взаимозаменяемо.
Базовые команды Python
pip
Менеджер пакетов Python. Команда pip install используется для установки любого программного пакета из онлайн-репозитория общедоступных пакетов или Индекса пакетов Python (PyPI, Python Package Index).
pip install имя-пакета
Команда для печати сообщений на экране или другом стандартном устройстве вывода. Команда print может использоваться для печати любого типа объекта — целого числа, строки, списка, кортежа и других.
print(объект)
class
Команда для создания классов. Python поддерживает объектно-ориентированное программирование и позволяет пользователям создавать классы и инициализировать объекты. Класс может состоять из переменных с модификаторами доступа, функций с возвращаемыми типами и даже других классов (вложенный класс). Синтаксис выглядит class так:
class ИмяКласса: код_тела_класса
Пример кода ниже продемонстрирует применение class при создании класса «student»:
«student»: class student: name = "" def setName(self, passedValue): self.name = passedValue def displayName(self): print(self.name)
Чтобы использовать класс в Python, необходимо сначала создать его экземпляр, называемый объектом. Для этого нужно вызвать класс по имени следующим образом:
ИмяКласса()
Как видно из приведенного выше синтаксиса, при создании объекта в Python, после имени класса всегда ставятся круглые скобки. Обычно для удобства поиска вновь созданный объект тут же привязывается к переменной, через которую к нему в дальнейшем и обращаются:
имя_переменной = ИмяКласса()
Пример создания объекта для класса «student»:
mystudent = student() mystudent.setName("Alex Ignatov") mystudent.displayName()
В результате мы получим вывод:
Alex Ignatov
Как и в других языках программирования, в Python также можно реализовать конструкторы и статические методы в классах, используя соответственно метод dunder init() и декоратор @staticmethod .
type
Команда для проверки типа или класса объекта.
type(объект)
range
Команда для генерации последовательности целых чисел, начиная с 0 по умолчанию и заканчивая n, где n не включено в сгенерированные числа. Эта команда в основном используется в циклах for.
range(start, stop, step)
В приведенном синтаксисе:
- start — начало диапазона (опционально; по умолчанию — 0);
- stop — номер, перед которым нужно остановиться (обязательно);
- step — счетчик приращений (опционально; по умолчанию — 1).
Важно. Если функции range() будут даны только два параметра, она всегда будет рассматривать их как (start, stop), а не как (stop, step).
round
Команда для округления числа до заданной точности в десятичных разрядах. Позволяет сократить количество цифр после запятой в числе с плавающей запятой до указанного значения.
round(number, digits)
В приведенном синтаксисе:
- number — число с плавающей запятой;
- digits — количество цифр после десятичной точки (опционально; по умолчанию — 0).
input
Команда для получения ввода от пользователя. Исполнение программы будет остановлено до тех пор, пока пользователь не введет какое-либо значение, которое будет преобразовано функцией input() в строку. Если в качестве входных данных нужно взять целое число, его нужно преобразовать явно.
input(message)
В приведенном синтаксисе: message — текст, который нужно отобразить пользователю (опционально).
def
Команда определения функции Python дает возможность оборачивать повторно используемый код внутри функций, чтобы вызваны его позже, когда это необходимо. Функция def позволяет свести к минимуму избыточность кода.
def имя_функции (параметры): """строка документации""" состояние(я)
len
Команда len или функция len() используются для подсчёта количества элементов в объекте. Если объект является строкой, то функция len() возвращает количество присутствующих в ней символов. Если объект представляет собой список или кортеж, он вернет количество элементов, присутствующих в этом списке или кортеже. При попытке передать len() целочисленное значение, функция выдает ошибку.
len(object)
В приведенном синтаксисе: object — объект, длину которого необходимо найти (обязательно).
Циклические команды
В Python есть две простейшие команды цикла (loop commands) — while и for . Команда while используется для выполнения набора операторов, если заданное условие истинно.
while condition: statements update iterator
Команда цикла for используется для выполнения набора операторов путем повторения последовательности. Эта последовательность может быть списком, кортежем, строкой, словарем и т. д.
for x in sequence: statements
Команды Python среднего уровня
Строковые команды
В языке программирования Python есть различные команды для строковых объектов. Они не изменяют исходный строковый объект, а просто возвращают новый. Наиболее важные функции и методы строк в Python — isalnum() , capitalize() , find() , count() и center() .
isalnum()
Команда isalnum() проверяет, являются ли все символы данной строки буквенно-цифровыми или нет. Он возвращает логическое значение.
stringname.isalnum()
capitalize()
Строковая функция capitalize() возвращает строку, изменяя ее первый символ на верхний регистр, а остальные переводя в нижний. Если первый символ уже в верхнем регистре, а также представляет собой целое число или любой специальный символ, команда ничего не делает.
stringname.capitalize()
find()
Команда find() используется для поиска подстроки в строке. Если таковая найдена, find() возвращает индекс первого вхождения подстроки, в противном случае возвращает -1.
string.find(substring)
В приведенном синтаксисе:
- string — строка, где будет выполняться поиск.
- substring — подстрока, значение которой нужно найти.
count()
Строковая функция count() возвращает количество вхождений подстроки в строковый объект.
stringname.count(substring, start, end)
В приведенном синтаксисе:
- stringname — строка, где будет выполняться поиск.
- substring — подстрока, значение которой нужно найти.
- start — начальный индекс в строке, с которого начинается поиск (опционально).
- end — конечный индекс в строке, где заканчивается поиск (опционально).
center()
Команда center() используется для выравнивания строки по центру с заполнением указанным символом.
string.center(length, character)
В приведенном синтаксисе:
- string — строка, которую нужно выровнять по центру.
- length — полная длина новой строки.
- character — символ для заполнения пропущенного места с каждой стороны. По умолчанию — « » (пробел).
Команды для объектов списка
Списки используются для хранения нескольких элементов с различными типами данных в одном объекте. Наиболее важные методы списков Python — append() , copy() , insert() , pop() , reverse() и sort() .
append()
Команда списка append() используется для добавления элемента в конец списка.
list.append(element)
В приведенном синтаксисе:
- list — объект списка, в который нужно добавить элемент.
- element — новый элемент, который добавляется в список.
copy()
Команда copy() создает новую копию объекта списка. Она возвращает новый объект списка.
list.copy()
insert()
Команда insert() добавляет элемент в указанное место в объекте списка.
listname.insert(position, element)
В приведенном синтаксисе:
- position — позиция, в которую нужно вставить новый элемент. Если указанная позиция превышает количество элементов в списке, элемент будет вставляться в конец.
- element — новый элемент, который необходимо добавить.
pop()
Метод pop() используется для удаления элемента из указанной позиции в списке. Он возвращает элемент после удаления его из списка.
listname.pop(position)
В приведенном синтаксисе: position — позиция откуда нужно удалить элемент.
reverse()
Метод reverse() изменяет порядок всех элементов в списке. Команда изменяет исходный объект списка и ничего не возвращает.
list.reverse()
sort()
Метод sort() по умолчанию используется для сортировки элементов списка в порядке возрастания.
list.sort()
Команды кортежа
Кортеж (tuple) — встроенный тип данных, который используется для хранения нескольких элементов в одной переменной. Объекты кортежа упорядочены и неизменны. В Python есть два встроенных метода кортежа — count() и index() .
count()
Метод count() используется для подсчета вхождений элемента в кортеже.
tuple.count(элемент)
index()
Метод index() используется для поиска индекса первого вхождения элемента. Если элемент не найден во всем кортеже, будет выведена ошибка «ValueError».
tuple.index(элемент)
Продвинутые команды Python
Команды множества
Встроенный тип множество ( set ) в Python используется для хранения нескольких элементов в одном объекте. Этот тип объектов не допускает дублирования или изменения элементов, только добавление новых или удаление существующих.
Множества неупорядочены и неиндексированы, поэтому при попытке отобразить все элементы set, они будут выведены в случайном порядке.
add()
Команда add() позволяет добавить новый элемент в множество.
setname.add(element)
В приведенном синтаксисе:
- setname — имя переменной set, в которую нужно добавить новый элемент.
- element — элемент, который необходимо добавить.
clear ()
Функция clear () удаляет все элементы set. Она не принимает никаких параметров.
setname.clear()
discard()
Команда discard() позволяет удалить указанный элемент из набора. Если элемент не найден в наборе, она не выдаст ошибку.
setname.discard(element)
В приведенном синтаксисе:
- setname — имя переменной set, из которой нужно удалить элемент.
- element — элемент, который необходимо удалить.
remove()
Команда remove() также используется для удаления указанного элемента из множества. От команды discard() она отличается сообщением об ошибке, которое выводится, если указанный элемент не найден.
setname.remove(element)
В приведенном синтаксисе:
- setname — имя переменной множества, из которой нужно удалить элемент.
- element — элемент, который необходимо удалить.
difference()
Метод difference() используется для получения множества, содержащего разность двух множеств. В нем будут только те элементы, которые присутствуют только в одном множестве и отсутствуют в другом. Например, difference() для множеств setA и setB будет .
setA.difference(setB)
difference_update()
Метод difference_update() позволяет получить набор элементов, которые присутствуют в первом множестве и не являются общими для обоих. Это означает, что difference_update() удаляет элементы, существующие в обоих множествах. Он не возвращает новый set, а просто удаляет общие элементы из первого множества.
setA.difference_update(setB)
intersection()
Метод intersection() отображает множество, содержащее элементы, которые существуют во всех указанных множествах.
set.intersection(set1, set2, … setn)
issubset()
Метод issubset() проверяет, все ли элементы множества setA присутствуют в setB. Команда возвращает логическое значение.
setA.issubset(setB)
symmetric_difference()
Метод symmetric_difference() возвращает симметричную разность двух множеств, содержащую все элементы, за исключением общих.
setA.symmetric_difference(setB)
union()
Метод union() возвращает все элементы из обоих множеств, кроме повторяющихся.
setA.union(setB)
if, elif, else
Эти операторы Python, также называемые операторами ветвления или операторами условного управления, позволяют изменять ход выполнения программы в зависимости от условий.
- Команда if оценивает выражение и, если оно истинно (true), выполняет операторы под ним.
- Команда elif (else if) предоставляет другое выражение, которое оценивается, если предыдущий оператор if возвращает отрицательное значение «false».
- Если никакие предыдущие операторы ( if или elif ) не возвращают положительное значение «true», вычисляется выражение, предоставленное командой else .
Обратите внимание. В одном блоке кода может быть несколько операторов if и elif .
В качестве простейшего примера использования if , elif и else приведем программу, которая оценивает, является ли заданное число положительным, отрицательным или нулем:
number = int(input("Введите число для оценки: ")) if (number > 0): print("Положительно") elif (number < 0): print("Отрицательно") else: print("Ноль")
В приведенном примере пришлось обернуть метод input() с помощью int() , так как ввод по умолчанию сохраняется как строковый тип, а нужно, чтобы переменная «number» имела целочисленный тип.
Разница между if и elif заключается в том, что все операторы if в блоке кода будут оцениваться один за другим, несмотря ни на что, а оператор elif будет оцениваться только, если предыдущий оператор if имеет значение false.
Команды словаря
Словарь (dictionary) — встроенный тип объектов в Python, который используется для хранения пар ключ-значение. Он упорядочен, модифицируем и не допускает дублирования значения ключей. Среди основных встроенных методов словаря в Python выделяются следующие: fromkeys() , get() , items() , keys() , values() , pop() , popitem() и setdefault() .
fromkeys()
Метод fromkeys() используется для создания словаря с указанными ключами и значением.
dict.fromkeys(keys, value)
В приведенном синтаксисе:
- keys — кортеж или список ключевых элементов.
- value — значение, которое будет связано со всеми указанными ключами.
get()
Метод get() позволяет получить значения указанного ключа. Если ключ не найден в словаре, get() ничего не вернет, если что-то не будет указано в параметрах.
dictionary.get(key, value)
В приведенном синтаксисе:
- dictionary — имя объекта словаря, в котором нужно выполнить поиск.
- key — ключ, который нужно найти в словаре.
- value — значение, которое будет возвращено, если ключ не будет найден в словаре.
items()
Метод items() используется для отображения всех элементов словаря. Он возвращает объект представления, который будет содержать все пары ключ-значение в виде кортежей в списке. items() не принимает никаких параметров.
dictionary.items()
keys()
Метод keys() используется для получения всех ключей, присутствующих в словаре. Он возвращает объект представления, содержащий все ключи словаря в виде списка. keys() не принимает никаких параметров.
dictionary.keys()
values()
Метод values() позволяет получить всех значения в словаре. Он возвращает объект представления, содержащий все значения словаря в виде списка. values() не принимает никаких параметров.
dictionary.values()
pop()
Метод pop() используется для удаления пары ключ-значение из словаря путем указания ключа. Он возвращает значение пары ключ-значение, которую необходимо удалить.
dictionary.pop(ключ)
Команда popitem () позволяет удалить последнюю вставленную пару из словаря. Она не принимает никаких параметров. popitem () возвращает удаленную пару в виде кортежа.
dictionary.popitem()
Метод setdefault() используется для получения значения указанного ключа. Если ключ не существует, он вставит ключ со значением, переданным в качестве параметра. Если значение не будет указано, setdefault() вставит ключ со значением «None».
dictionary.setdefault(key, value)
Магические команды IPython
«Магические команды» (magic commands) или магические методы Python — одно из важнейших дополнений, сделанных к оригинальной оболочке Python Shell в процессе создания ядра IPython и его официальной реализации Jupyter Notebook. Эти встроенные команды IPython упрощают решение задач по анализу данных с помощью Python, а также обеспечивают упрощенное взаимодействие «змеиного языка» с операционными системами, другими языками программирования или ядрами.
Магические команды Python делятся на 2 типа:
- Строчные (line magics) — обычно начинаются с символа % и работают только в одной строке, Строчные магические команды могут использоваться как выражения, а их возвращаемое значение может быть присвоено переменной.
- Ячеечные (cell magics) — обозначаются двойным префиксом %% и работают во всей ячейке. Они могут вносить произвольные изменения в получаемые входные данные, которые необязательно должны быть кодом Python.
%lsmagic
Команда, которая выводит список всех магических функций, доступных на данный момент.
%quickref
Это команда-шпаргалка, похожая на %lsmagic . Он отображает краткую справку со списком возможностей каждой магической функции.
%who
Позволяет вам увидеть список всех ранее определенных переменных. Вместе с %who используются 2 производные от нее магические команды:
- %whos , которая дает дополнительную информацию о каждой переменной;
- %who_ls — возвращает отсортированный список текущих переменных.
%xdel
Удаляет переменную и любые ссылки на нее из механизма IPython.
%time
Возвращает время выполнения инструкции или выражения Python. Эту команду можно использовать для измерения времени необходимого среде IPython для выполнения выражения Python.
%pinfo
Эта волшебная команда Jupyter Notebook позволяет получить информацию об объекте.
%run
Функция запускает файл Python как программу в Jupyter Notebook. Это может быть особенно полезно, если нужно применить функции, хранящиеся во внешних файлах Python.
%run [имя файла]
В приведенном синтаксисе аргумент «имя файла» должен быть либо скриптом Python (с расширением .py), либо файлом с пользовательским синтаксисом IPython.
%load
Волшебная функция очень похожая на %run . Она загружает код файла в текущий интерфейс Jupyter Notebook. Источником может быть имя файла в каталоге используемого документа (Notebook), URL-адрес или макрос.
%load [имя файла]
В приведенном синтаксисе аргумент «имя файла» должен быть либо скриптом Python (с расширением .py), либо файлом с пользовательским синтаксисом IPython.
Более функциональным аналогом %load служит магическая команда %pycat , которая показывает код внешнего файла Python с подсветкой синтаксиса.
%%writefile
Копирует содержимое ячейки во внешний файл. Магическая команда полезна, если нужно быстро создать файл с кодом в Jupyter Notebook с помощью экспорта всего содержимого указанной ячейки.
Для выполнения экспорта нужно просто добавить %%writefile перед кодом. Команда создаст новый файл, если он не существует. В противном случае файл будет перезаписываться, пока после команды не будет добавлено -a .
%paste
Команда одновременно вводит и выполняет код, делая функцию готовой к использованию. Команда с аналогичным функционалом %cpaste открывает интерактивную многострочную подсказку, в которую можно вставить один или несколько фрагментов кода для выполнения в пакете.
Команды рабочего каталога
%pwd
Волшебная функция %pwd отображает текущий путь к рабочему каталогу.
%cd
Команда %cd позволяет сменить каталог, если после нее указать новый путь. Ее можно использовать несколькими способами:
- %cd — изменяет текущий рабочий каталог на ;
- % cd .. — изменяет текущий каталог на родительский;
- %cd — изменяет текущий каталог на последний посещенный.
%history
Команда %history отображает все предыдущие команды в текущем сеансе. Увидеть подобный список команд и функций может быть полезно, если была случайно удалена команда и ее результат.
%dhist
Волшебная команда %dhist выводит все каталоги, посещенные в текущем сеансе. Каждый раз, когда используется команда %cd , этот список обновляется в переменной « dh ».
%env
Магическая функция используется для получения, установки и перечисления переменных среды. Запуск команды без аргументов отобразит список всех переменных среды. Также можно ввести имя переменной среды, за которой следует команда, и она вернет ее значение:
%env HOMEDRIVE
или использовать %env для установки значения переменной окружения:
%env: HOMEDRIVE=F:
%edit
Эта волшебная команда вызывает текстовый редактор, используемый по умолчанию в текущей ОС (например, «Блокнот» Windows) для редактирования скрипта Python. Скрипт выполняется при закрытии редактора.
%autocall
Эта волшебная команда позволяет автоматически вызывать функцию без использования круглых скобок.
%autocall [режим]
Для приведенного синтаксиса доступно 3 аргумента режима:
- 0 — выключено;
- 1 — smart-режим (по умолчанию);
- 2 — всегда включен.
%automagic
Позволяет вводить магические команды без префикса «%», если установлено значение «1». Без аргументов функция включается/выключается. Для деактивации нужно установить значение «0».
%matplotlib
Магическая функция активирует интерактивную поддержку matplotlib во время сеанса IPython. Однако она не импортирует библиотеку matplotlib.
%notebook
Эта функция преобразует текущую историю IPython в файл «блокнота» IPython с расширением ipynb.
%recall
При выполнении без каких-либо параметров эта функция выполняет предыдущую команду. При указании номера ячейки ( %recall n ) после команды, вызывается команда в этой ячейке ( n ).
%gui [GUINAME]
При использовании без аргумента команда включает или отключает интеграцию цикла событий IPython GUI. С аргументом GUINAME магическая функция заменяет наборы инструментов GUI , используемые по умолчанию, на указанный.
| No. | Команда %gui с аргументом и описание |
| 1 | %gui wx |
Заключение
В этой статье мы провели краткий экскурс по основным методам Python, которыми должен овладеть каждый программист, изучающий «змеиный язык». Приведенный список команд для Python с пояснениями и примерами поможет каждому новичку быстро освоить базовые приемы работы с функционалом этого востребованного языка программирования.
Для лучшего результата в освоении рекомендуем не только попробовать выполнить каждую из приведенных выше команд Python, но и самостоятельно поэкспериментировать со случайными входными параметрами, чтобы увидеть поведение команд.
Нужна надёжная база для разработки программных продуктов на Python? Выбирайте виртуальные серверы от Eternalhost с технической поддержкой 24/7 и защитой от DDoS-атак!
Как выглядит код на python

2. Используйте информативные названия. Ваши коллеги и разработчики должны быть в состоянии выяснить, какой у вас тип переменной и что она хранит по имени. Короче говоря, ваш код должен быть легко читаемым и осмысленным.
# Not recommended c = [“UK”, “USA”, “UAE”] for x in c: print(x) # Recommended cities_list = [“UK”, “USA”, “UAE”] for city in cities_list: print(city)
3. Всегда используйте один и тот же словарь. Соблюдайте соглашение об именах. Соблюдение принятого соглашения об именах важно для устранения путаницы, когда другие разработчики работают над вашим кодом. И это относится к именованию переменных, файлов, функций и даже структур каталогов.
# Not recommended client_first_name = ‘John’ customer_last_name = ‘Doe; # Recommended client_first_name = ‘John’ client_last_name = ‘Doe’ # Another example: # bad code def fetch_clients(response, variable): # do something pass def fetch_posts(res, var): # do something pass # Recommended def fetch_clients(response, variable): # do something pass def fetch_posts(response, variable): # do something pass
4. Не используйте магические числа. Магические числа — это числа со специальной жестко заданной семантикой, которые появляются в коде, но не имеют никакого значения или объяснения. Обычно эти числа появляются как литералы более чем в одном месте кода.
import random # Not recommended def roll_dice(): return random.randint(0, 4) # what is 4 supposed to represent? # Recommended DICE_SIDES = 4 def roll_dice(): return random.randint(0, DICE_SIDES)
2.2. Функции
5. Длинные имена != описательные имена. Вы должны подробно описывать, но только релевантную информацию. Например, хорошие имена функций описывают то, что они делают хорошо, не включая подробности о реализации или узкоспециальном использовании.
DICE_SIDES = 4 # Not recommended def roll_dice_using_randint(): return random.randint(0, DICE_SIDES) # Recommended def roll_dice(): return random.randint(0, DICE_SIDES)
6. Следуйте соглашению о присвоении имен функций . Как видно из приведенных выше переменных, придерживайтесь соглашения при именовании функций. Использование различных соглашений об именах могло бы сбить с толку других разработчиков и коллег.
# Not recommended def fetch_user(id): # do something Pass def get_post(id): # do something pass # Recommended def fetch_user(id): # do something Pass def fetch_post(id): # do something pass
7. Не используйте флаги, в том числе логические. Логические флаги — это переменные, которые содержат логическое значение — true или false . Эти флаги передаются функции и используются функцией для определения ее поведения.
text = "Python is a simple and elegant programming language." # Not recommended def transform_text(text, uppercase): if uppercase: return text.upper() else: return text.lower() uppercase_text = transform_text(text, True) lowercase_text = transform_text(text, False) # Recommended def transform_to_uppercase(text): return text.upper() def transform_to_lowercase(text): return text.lower() uppercase_text = transform_to_uppercase(text) lowercase_text = transform_to_lowercase(text)
2.3. Классы
8. Не добавляйте лишний контекст. Это может произойти из-за добавления ненужных переменных к именам переменных при работе с классами.
# Not recommended class Person: def __init__(self, person_username, person_email, person_phone, person_address): self.person_username = person_username self.person_email = person_email self.person_phone = person_phone self.person_address = person_address # Recommended class Person: def __init__(self, username, email, phone, address): self.username = username self.email = email self.phone = phone self.address = address
3. Использование пустого пространства
3.1. Отступ
Организуйте для своего кода последовательный отступ, стандартом является использование 4 пробелов для каждого отступа. Вы можете сделать это по умолчанию в текстовом редакторе. При использовании отступа следует учитывать следующее: в первой строке не должно быть аргументов, а дальнейший отступ должен использоваться для четкого выделения в качестве продолжения строки:
# Correct: # Aligned with opening delimiter. foo = long_function_name(var_one, var_two, var_three, var_four) # Add 4 spaces (an extra level of indentation) to distinguish arguments from the rest. def long_function_name( var_one, var_two, var_three, var_four): print(var_one) # Hanging indents should add a level. foo = long_function_name( var_one, var_two, var_three, var_four)
# Wrong: # Arguments on first line forbidden when not using vertical alignment. foo = long_function_name(var_one, var_two, var_three, var_four) # Further indentation required as indentation is not distinguishable. def long_function_name( var_one, var_two, var_three, var_four): print(var_one)
3.2. Максимальная длина линии
Постарайтесь ограничить свои строки примерно 79 символами, что является рекомендацией, приведенной в руководстве по стилю PEP 8 . Во многих хороших текстовых редакторах есть настройка для отображения тонкой линии, указывающей, где находится ограничение в 79 символов.
3.3. Пустые строки
Добавление пустых строк в ваш код сделает его лучше, чище и понятнее. Вот простое руководство по добавлению пустых строк в ваш код:
- Окружите определения функций и классов верхнего уровня двумя пустыми строками.
- Определения методов внутри класса отделены пустой строкой.
- Дополнительные пустые строки могут использоваться (экономно) для разделения групп связанных функций. Пустые строки могут быть опущены между набором связанных однострочников (например, набор фиктивных реализаций).
- Осторожно используйте пустые строки в функциях для обозначения логических разделов.
4. Комментарии и документация
Как бы мы ни старались писать чистый код, в вашей программе все равно будут части, требующие дополнительных пояснений. Комментарии позволяют нам быстро рассказать другим разработчикам (и самим себе в будущем), почему мы написали это именно так. Однако будьте осторожны, так как слишком много комментариев может сделать ваш код более сложным для восприятия, чем он был бы без них.
4.1. Встроенные комментарии
Встроенные комментарии — это текст, следующий за символами решетки по всему коду. Они используются для объяснения частей вашего кода и действительно помогают будущим участникам понять вашу работу.
Одним из способов использования комментариев является документирование основных шагов сложного кода, чтобы помочь читателям следить за ними. Тогда, возможно, вам не нужно будет досконально вникать в код, чтобы понять, что он делает. Однако другие утверждают, что такое использование комментариев служит скорее для оправдания плохого кода, и если код требует комментариев, это признак того, что необходим рефакторинг.
Комментарии полезны для пояснений, когда код не может объяснить, почему он был написан таким образом или почему были выбраны определенные значения . Например, почему тот или иной метод был реализован определенным образом. Иногда может применяться нестандартный или кажущийся произвольным подход из-за какой-то неясной внешней переменной, вызывающей проблемы. Эти вещи трудно объяснить с помощью кода.
Вот несколько советов, как писать хорошие комментарии:
1. Не комментируйте плохой код, перепишите его
Комментирование плохого кода поможет вам только в краткосрочной перспективе. Рано или поздно одному из ваших коллег придется поработать с вашим кодом, и он в конечном итоге перепишет его, потратив несколько часов на то, чтобы понять, что он делает. Поэтому лучше переписать плохой код с самого начала, чем просто комментировать его.
2. Не добавляйте комментарии, когда в этом нет необходимости.
Если ваш код достаточно читаем, вам не нужны комментарии. Добавление бесполезных комментариев только сделает ваш код менее читаемым. Вот плохой пример:
# This checks if the user with the given ID doesn't exist. if not User.objects.filter(id=user_id).exists(): return Response(< 'detail': 'The user with this ID does not exist.', >)
Как правило, если вам нужно добавить комментарии, они должны объяснять, почему вы что-то сделали, а не то, что происходит.
3. Не оставляйте закомментированный устаревший код
Худшее, что вы можете сделать, — это оставлять закомментированный код в своих программах. Весь отладочный код или отладочные сообщения должны быть удалены перед отправкой в систему контроля версий, иначе ваши коллеги побоятся их удалить, а ваш закомментированный код останется там навсегда.
4.2. Строки документации
Docstrings, или с троки документации, — это ценные фрагменты документации, которые объясняют функциональность любой функции или модуля в вашем коде. В идеале каждая из ваших функций всегда должна иметь docstrings , которые заключаются в тройные кавычки.
Первая строка docstrings представляет собой краткое объяснение назначения функции. Следующий элемент строки документации — это объяснение аргументов функции. Здесь вы перечисляете аргументы, указываете их назначение и типы. Наконец, обычно приводится некоторое описание вывода функции. Каждая часть строки документации является необязательной; однако строки документа являются частью хорошей практики кодирования. Ниже приведены два примера строки документации для функции. В первом будет использоваться однострочная строка документации, а во втором — многострочные строки документации:
def population_density(population, land_area): """Calculate the population density of an area.""" return population / land_area
def population_density(population, land_area): """Calculate the population density of an area. Args: population: int. The population of the area land_area: int or float. This function is unit-agnostic, if you pass in values in terms of square km or square miles the function will return a density in those units. Returns: population_density: population/land_area. The population density of a particular area. """ return population / land_area
4.3. Документация
Документация по проекту необходима для того, чтобы другие понимали, почему и как ваш код актуален для них, независимо от того, являются ли они потенциальными пользователями вашего проекта или разработчиками, которые могут внести свой вклад в ваш код.
Отличным первым шагом в проектной документации является файл README . Очень часто это будет первым взаимодействием большинства пользователей с вашим проектом. Будь то приложение или пакет, к вашему проекту обязательно должен быть приложен файл README. Как минимум он должен содержать объяснения того, что он делает, и перечисления зависимостей, а также предоставлять достаточно подробные инструкции о том, как его использовать. Это поможет другим понять цель вашего проекта и быстро получить что-то работающее.
Формальное изложение всех ваших идей и мыслей на бумаге может быть немного сложным, но со временем у вас будет лучше получаться, а также вы существенно поможете другим осознать ценность вашего проекта. Написание этой документации также может помочь вам улучшить дизайн вашего кода, поскольку вам придется более тщательно продумывать свои проектные решения. Кроме того, пользователям будет легче понять, как использовать ваш код.
Материалы по теме
Источники
Базовый синтаксис языка Python
программирования, работающий на всех распространённых операционных системах.
В настоящее время существует две версии языка Python: более старая и стремительно теряющая популярность версия 2 и современная версия 3. Мы будем использовать версию 3 данного языка. Именно её необходимо установить дома, скачав данную версию с сайта www.python.org.
Запустить интерпретатор python можно из командной строки:
python3
Будьте внимательны: команда python может запустить интерпретатор версии 2, с которым мы работать не будем. В системе Windows можно использовать пункт меню «Python (command line)».
Интерактивный режим
Откройте командную строку и напишите команду python3.
Вы увидите примерно следующее приглашение командной строки:
Python 3.10.6 (main, Aug 2 2022, 00:00:00) [GCC 12.1.1 20220507 (Red Hat 12.1.1-1)] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Вводите команды и наслаждайтесь результатом. А что можно вводить? Несколько примеров:
>>> 2 + 2 4 >>> 2 ** 100 1267650600228229401496703205376 >>> 'Hello' + 'World' 'HelloWorld' >>> 'ABC' * 10 'ABCABCABCABCABCABCABCABCABCABC'
Первая команда вычисляет сумму двух чисел, вторая команда вычисляет 2 в степени 100, третья команда выполняет операцию конкатенации ("склеивания") для строк, а четвертая команда печатает строку 'ABC' , повторенную 10 раз.
Хотите закончить работу с питоном? Введите команду exit () (именно так, со скобочками, так как это — функция) или нажмите :python:Ctrl+D.
Программируемый режим
В предыдущей главе мы использовали Python для простых разовых вычислений, используя интерактивный режим. Теперь создадим программу и выполним её целиком.
a = 179 b = 197 c = (a ** 2 + b ** 2) ** 0.5 print (c)
Здесь мы используем переменные — объекты, в которых можно сохранять различные (числовые, строковые и прочие) значения. В первой строке переменной a присваивается значение 179 , затем переменной b присваивается значение 197 , затем переменной c присваивается значение арифметического выражения (a 2 + b 2 ) 1 ⁄ 2 , равного длине гипотенузы. После этого значение переменной c выводится на экран.
Упражнение №1: первая программа
Откройте произвольный текстовый редактор, например, gedit . Скопируйте туда текст программы, написанной выше. Сохраните текст в файле с именем hypot . py .
Запустите терминал, перейдите в каталог, где лежит файл hypot . py и выполните эту программу:
python3 hypot.py
Интерпретатор языка Python вместо интерактивного режима выполнит последовательность команд из файла.
При этом значения вычисленных выражений не выводятся на экран (в отличие от интерактивного режима), поэтому для того, чтобы вывести результат работы программы, то есть значение переменной c , нужна функция print () .
Базовый синтаксис языка Python 3
Типы данных
Итак, мы видим, что Python умеет работать как минимум с двумя видами данных — числами и строками. Числа записываются последовательностью цифр, также перед числом может стоять знак минус, а строки записываются в одинарных кавычках. 2 и '2' — это разные объекты, первый объект — число, а второй — строка. Операция :python:+ для целых чисел и для строк работает по-разному: для чисел это сложение, а для строк — конкатенация.
Кроме целых чисел есть и другой класс чисел: действительные (вещественные числа), представляемые в виде десятичных дробей. Они записываются с использованием десятичной точки, например, 2.0 .
Определить тип объекта можно при помощи функции type :
>>> type(2) >>> type('2') >>> type(2.0)
Обратите внимание: type является функцией, аргументы функции указываются в скобках после ее имени.
Операции с числами
Вот список основных операций для чисел:
- A + B — сумма;
- A - B — разность;
- A * B — произведение;
- A / B — частное;
- A ** B — возведение в степень:
- A // B — целочисленное деление;
- A % B — остаток от деления.
Полезно помнить, что квадратный корень из числа :python:x — это x ** 0.5 , а корень степени :python:n — это x ** ( 1 / n ) .
Есть также унарный вариант операции :python:-, то есть это операция с одним аргументом. Она возвращает число, противоположное данному. Например: - A .
В выражении может встречаться много операций подряд. Как в этом случае определяется порядок действий? Например, чему будет равно 1 + 2 * 3 ** 1 + 1 ? В данном случае ответ будет 8, так как сначала выполняется возведение в степень, затем — умножение, затем — сложение (соответствует математическому 1 + 2⋅3 1 + 1 ).
Более общие правила определения приоритетов операций такие:
- Выполняются возведения в степень справа налево, то есть 3 ** 3 ** 3 это 3 27 .
- Выполняются унарные минусы (отрицания).
- Выполняются умножения и деления слева направо. Операции умножения и деления имеют одинаковый приоритет.
- Выполняются сложения и вычитания слева направо. Операции сложения и вычитания имеют одинаковый приоритет.
Операции над строками
- A + B — конкатенация;
- A * n — повторение n раз, значение n должно быть целого типа.
Ветвление
Ветвление (или условная инструкция) в Python имеет следующий синтаксис:
if Условие: Блок_инструкций_1 else: Блок_инструкций_2
Блок_инструкций_1 будет выполнен, если Условие истинно. Если Условие ложно, будет выполнен Блок_инструкций_2 .
В условной инструкции может отсутствовать слово else и последующий блок. Такая инструкция называется неполным ветвлением. Например, если дано число x и мы хотим заменить его на абсолютную величину x , то это можно сделать следующим образом:
if x 0: x = -x print(x)
В этом примере переменной x будет присвоено значение - x , но только в том случае, когда x < 0 . А вот инструкция print ( x ) будет выполнена всегда, независимо от проверяемого условия.
Для выделения блока инструкций, относящихся к инструкции if или else , в языке Python используются отступы. Все инструкции, которые относятся к одному блоку, должны иметь равную величину отступа, то есть одинаковое число пробелов в начале строки. Рекомендуется использовать отступ в 4 пробела.
Вложенные условные инструкции
Внутри условных инструкций можно использовать любые инструкции языка Python, в том числе и условную инструкцию. Вложенное ветвление — после одной развилки в ходе исполнения программы появляется другая развилка. При этом вложенные блоки имеют больший размер отступа (например, 8 пробелов).
Примере программы, которая по данным ненулевым числам x и y определяет, в какой из четвертей координатной плоскости находится точка (x,y):
x = int(input()) y = int(input()) if x > 0: if y > 0: # x>0, y>0 print("Первая четверть") else: # x>0, y print("Четвертая четверть") else: if y > 0: # x0 print("Вторая четверть") else: # x <0, yprint("Третья четверть")
В этом примере мы использовали комментарии – текст, который интерпретатор игнорирует. Комментариями в Pythonе является символ # и весь текст после этого символа до конца строки. Желательно писать код так, чтобы комментарии были излишними, однако допускается писать их там, где возникают "призраки" (утверждения или теоремы, которые использованы при написании кода, но не следуют из самого кода). Однако код выше является плохим примером документации: комментарии врут, поскольку автором не учтены точки на осях.
Операторы сравнения
Как правило, в качестве проверяемого условия используется результат вычисления одного из следующих операторов сравнения:
| Оператор | Значение |
|---|---|
| Меньше — условие верно, если первый операнд меньше второго. | |
| > | Больше — условие верно, если первый операнд больше второго. |
| Меньше или равно — условие верно, если первый операнд меньше или равен второму. | |
| >= | Больше или равно — условие верно, если первый операнд больше или равен второму. |
| == | Равенство. Условие верно, если два операнда равны. |
Операторы сравнения в можно объединять в цепочки, например, a == b == c или 1
Тип данных bool
Операторы сравнения возвращают значения специального логического типа bool . Значения логического типа могут принимать одно из двух значений: True (истина) или False (ложь). Если преобразовать логическое True к типу int , то получится 1, а преобразование False даст 0. При обратном преобразовании число 0 преобразуется в False , а любое ненулевое число в True . При преобразовании str в bool пустая строка преобразовывается в False , а любая непустая строка в True .
Каскадные условные инструкции
Пример программы, определяющий четверть координатной плоскости, можно переписать, используя «каскадную» последовательность инструкцией if . elif . else :
x = int(input()) y = int(input()) if x > 0 and y > 0: print("Первая четверть") elif x 0 and y > 0: print("Вторая четверть") elif x 0 and y 0: print("Третья четверть") elif x > 0 and y 0: print("Четвертая четверть") else: print("Точка находится на осях или в центре координат.")
В такой конструкции условия if , . elif проверяются по очереди, выполняется блок, соответствующий первому из истинных условий. Если все проверяемые условия ложны, то выполняется блок else , если он присутствует. Обратите внимание, что таким образом мы чётче видим условия наступления случаев (нет "призраков"), а также отлавливаем ситуацию, когда точка не находится ни в одной из четвертей.
Цикл while
Цикл while («пока») позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while в простейшем случае выглядит так:
while Условие: Блок_инструкций
При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается и управление передается на следующую инструкцию после тела цикла while . Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран всех целые числа, не превосходящие n:
a = 1 while a n: print(a) a += 1
Общая схема цикла while в данном случае для перебора всех подходящих значений такая:
a = начальное_значение while а_является_подходящим_числом: обработать_a перейти_к_следующему_a
Выведем все степени двойки, не превосходящие числа n:
a = 1 while a n: print(a) a *= 2
Цикл for
Цикл for может быть использован как более краткая альтернатива циклу while .
Для последовательного перебора целых чисел из диапазона [ 0 ; n ) можно использовать цикл for :
for i in range(10): print(i)
Этот код по выполняемым действиям полностью соответствуют циклу while :
i = 0 while i 10: print(i) i += 1
Можно задавать начальные и конечные значения для переменной цикла, а также шаг:
for i in range(20, 10, -2): print(i)
Аналогичный цикл while
i = 20 while i > 10: print(i) i -= 2
Контест №1
Программированию учатся на практике, поэтому в курсе каждую неделю будет контест. Контест - это набор задач с системой автоматической проверки решения на тестовых наборах данных. Для участия необходима регистрация на контест.
В первый раз вам придётся создать пользователя (логин и пароль обязательно запишите!), а также ввести некоторую регистрационную информацию: фамилию, имя, номер учебной группы. Пожалуйста, вводите реальные данные, иначе преподаватель не сможет учитывать ваши решения.
Попробуйте сдать решение первой задачи:
x, y = input().split() x, y = int(x), int(y) print(x + y)
Сайт построен с использованием Pelican. За основу оформления взята тема от Smashing Magazine. Исходные тексты программ, приведённые на этом сайте, распространяются под лицензией GPLv3, все остальные материалы сайта распространяются под лицензией CC-BY.
