# конспект · шаг 7 из 7
Конспект: Python для курса
Понятия
Целочисленное деление // - частное, округлённое вниз, к минус бесконечности. Остаток % берёт знак
делителя, и a == (a // b) * b + a % b верно всегда.
Массив - элементы подряд в памяти; a[i] вычисляется арифметикой за один шаг. Список Python - массив
ссылок с запасом в конце.
Срез a[i:j] - новый список из элементов с i по j - 1. Срез копирует.
Словарь - значение по ключу, множество - «есть или нет»; оба в среднем за один шаг. Кортеж - неизменяемый список.
Аргумент - значение, переданное в функцию; параметр становится вторым именем этого значения. Локальная переменная - имя, которому присвоено значение внутри функции.
Стек вызовов - стопка наборов локальных имён; новый вызов кладётся сверху, return снимает.
Что унести
| запись | Python | C, Java, JS |
|---|---|---|
7 / 2 |
3.5 |
3 в C и Java |
-7 // 2 |
-4 |
-3 (к нулю) |
-7 % 2 |
1 |
-1 |
2 ** 100 |
точное число | переполнение |
0.1 + 0.2 == 0.3 |
False |
false |
a[-1] |
последний элемент | ошибка или мусор |
b = a для списка |
второе имя | зависит от языка |
Правая граница среза и range не входит: a[:k] + a[k:] == a при любом k, длина a[i:j] - j - i.
a, b = b, a + b сначала вычисляет правую часть целиком, потом раздаёт имена. Две отдельные строки
дают другое.
and и or ленивые: i >= 0 and a[i] > x не тронет a[i] при отрицательном i. Ложь - это 0, "",
[], {}, None.
Ключ словаря и элемент множества - только неизменяемое: число, строка, кортеж.
Изменение значения внутри функции видно снаружи, переприсваивание параметра - нет.
Ловушки джокера
Отрицательное число в // или % после переноса кода с C. Соседний ответ без единой ошибки.
Предыдущий элемент при i = 0. a[i - 1] молча возвращает последний.
b = a вместо копии. Изменения «копии» портят оригинал.
Таблица [[0] * 3] * 3. Три ссылки на одну строку.
Удаление из списка внутри for по нему же. Следующий элемент перепрыгивается.
a = a.sort(). Методы, меняющие список на месте, возвращают None.
def f(x, acc=[]). Один список на все вызовы. По умолчанию None, список - в теле.
s = {} как пустое множество. Это словарь; пустое множество - set().
x in spisok в цикле. Квадрат вместо линии; множество снимает это одной строкой.
Склейка строк в цикле. Каждая склейка копирует всю строку; собирать в список и join.
Проверь себя
Почему -7 % 2 в Python равно 1 и какое равенство это объясняет?
Что напечатает a = [1]; b = a; b.append(2); print(a) и как сделать копию?
Почему список нельзя сделать ключом словаря, а кортеж можно?
Почему def f(x, acc=[]) помнит прошлые вызовы?
Комментарии
Пока нет комментариев. Будь первым!
Оставить комментарий