Краткая справка по Python
Этот документ — именно краткая справка. За подробностями лучше обращаться к официальной документации.
Общая структура программы
Программа на языке Python представляет собой последовательность команд: каждая команда — на отдельной строчке (допускается также разделять команды точкой-с-запятой).
Самые частовстречающиеся команды:
- вычислить значение формулы (оформляется этой самой формулой)
- изменить что-нибудь (оформляется знаком
=, справа от которого стоит формула, а слева — то, что нужно изменить) - ветвление (оформляется при помощи слов
if,elif,else) - цикл (оформляется при помощи слов
forилиwhile) - определение подпрограмм (оформляется при помощи слова
def) - использование внешнего модуля (оформляется при помощи слова
import)
Также в программе могут встречаться комментарии, начинающиеся
знаком # и длящиеся до конца строчки.
Синтаксис формул
Формулы — отдельная грамматическая категория. Команды внутри формул не встречаются, а вот формулы являются частью почти всех команд!
Формулы составляются из литералов, переменных и операторов.
Переменные
С точки зрения грамматики переменная — одно слово, не совпадающее ни
с одним из небольшого набора зарезервированных (таких как if, else и т.п.).
В слове допускаются буквы, нижние подчёркивания,
цифры (но цифра не может стоять в начале слова).
Значением переменной является объект, к которому она привязана в данный момент. Изменить привязку можно командой изменения:
переменная = формула
которая сначала вычисляет значение формулы, а потом привязывает указанную переменную к этому значению.
Допускается множественное изменение (в нём может участвовать и больше двух переменных):
переменная1, переменная2 = формула1, формула2
Операторы
Оператор применяется к одной или нескольким формулам, называемым операндами этого оператора. Количество таких формул называется арностью этого оператора.
Среди операторов наиболее часто встречаются:
- вызов функции
XXX(YYY) - доступ к атрибуту
XXX.YYY - индексация коллекции
XXX[YYY] - проверка на вхождение
XXX in YYY - сумма
XXX + YYY, разностьXXX - YYY, произведениеXXX * YYY - частное
XXX / YYY, неполное частноеXXX // YYY, остатокXXX % YYY - унарный минус
-XXX - степень
XXX ** YYY - эквивалентность
XXX == YYY, неэквивалентностьXXX != YYY - строгие неравенства
XXX < YYYиXXX > YYY - нестрогие неравенства
XXX <= YYYиXXX >= YYY - логические операции: не
not XXX, иXXX and YYY, илиXXX or YYY - поразрядные/поэлементные операции: и
XXX & YYY, илиXXX | YYY, суммаXXX ^ YYY
Литералы
Литералами называются специальные обозначения для некоторых объектов. Можно считать их операторами с уникальным (для каждого из них) синтаксисом.
Стандарт языка Python к литералам относит обозначения для текстовых и числовых литералов. По факту обозначения для некоторых коллекций и функций тоже зачастую относят к литералам (стандарт языка относит их к операторам).
Наиболее часто встречаются:
- числа
123,12.3,1.23e1,2+3jи тому подобное - тексты
'foo'или"foo"(одинарные и двойные кавычки не различаются) - функции
lambda x,y: x + 2*y - списки (массивы)
[1,2,3] - кортежи (неизменяемые массивы)
(1,2,3) - множества
{1,2,3} - словари (ассоциативные массивы)
{"foo": 1, 3: "bar", 5+1: 3+1}
Семантика формул
Арифметика
Всё более-менее стандартно по модулю одной особенности: неполное частное — результат округления соответствующей дроби вниз, а не к нулю (как принято в большинстве языков программирования). При этом всегда выполняется
a == (a // b) * b + (a % b)
Логика
В качестве основных логических значений используются «истина»
True и «ложь» False. К ним можно применять конъюнкцию
(& или and), дизъюнкцию (| или or), сложение ^ и отрицание not.
Отдельно выделим and и or: они вычисляют свой правый операнд только
если левый истинный (для and) и ложный (для or). Ложными считаются
None, False, всевозможные нули и всевозможные пустые контейнеры.
Остальные объекты встроенных типов считаются истинными.
Функции
Скоро появится
Списки
Список работает как набор «безымянных переменных», называемых его элементами. Элементы нумеруются последовательными натуральными числами (начиная с нуля).
Элемент списка можно получить при помощи формулы список[номер], где
список — формула, значением которой является интересующий нас список,
а номер — формула, значением которой является интересующий нас номер
элемента.
Узнать количество элементов списка можно функцией len.
Изменить элемент списка можно командой изменения. Например:
foo[3] = 5 ## привязать третий элемент к пятёрке
Очень важный момент: каждый списковый литерал создаёт новый список, а перепривязка переменной — нет.
foo = [1,2,3,4,5]
bar = foo # bar привязана к тому же списку, что и foo
bar[0] = 5 # теперь и foo[0] == 5
baz = [1,2,3,4,5] # а это -- уже совсем другой список
bar[1] = baz[1] # первый элемент списка bar теперь привязан к
# значению формулы baz[1], то есть числу 2
# (но не к первому элементу списка baz!)
Чтобы скопировать часть списка (то есть создать новый список с теми же привязками), можно воспользоваться срезом:
foo = [1, [2, 3], 4]
bar = foo[1:3] # копируем элементы списка с 1-го (включая) по 3-й (исключая)
bar[1] = 5 # foo[2] по-прежнему 4
bar[0][0] = 5 # теперь и foo[1][0] == 5: срез делает "неглубокую" копию
В срезе можно опустить один или оба индекса. Тогда они считаются равными
нулю и количеству элементов списка соответственно. В частности,
foo[:] делает копию всего списка foo.
Также допускаются срезы с тремя индексами (подробности — в документации).
Добавить новые элементы к списку можно при помощи метода
(атрибута-подпрограммы) append: foo.append(123) добавляет в конец
списка foo элемент, привязанный к числу 123.
Кортежи
Кортежи отличаются от списков только тем, что их структуру (длину и привязки элементов) нельзя изменять. Тем не менее, никто не мешает на основе список и кортежей делать, например, «списки постоянной длины»:
foo = ([1], [2], [3])
foo[1][0] = 5 # теперь foo == ([1], [5], [3])
# можно даже спрятать соответствующие формулы с [0] за функциями
def get_elem(a, i): return a[i][0]
def set_elem(a, i, v): a[i][0] = v
# теперь, не зная о внутренней структуре "списков постоянной длины", их
# "элементы" невозможно (зло)намеренно удлинить
Множества
Скоро появится
Словари
Скоро появится
Семантика команд
Скоро появится