1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7

# конспект · шаг 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=[]) помнит прошлые вызовы?

Комментарии

Пока нет комментариев. Будь первым!

Оставить комментарий

Комментарий появится после проверки. Email не публикуется. Войти, чтобы не вводить имя каждый раз.