Краткая справка по 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
# теперь, не зная о внутренней структуре "списков постоянной длины", их
# "элементы" невозможно (зло)намеренно удлинить
Множества
Скоро появится
Словари
Скоро появится
Семантика команд
Скоро появится