Python School
82.4K subscribers
2.4K photos
7 videos
568 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
加入频道
Как можно узнать имя объекта

Вообще говоря, никак, поскольку объекты в действительности не имеют имён. Важно: присваивание всегда связывает имя с объектом. Это верно и для инструкций def и class.

Возможно, класс имеет имя: однако, хотя он связан с двумя именами и запрашивается через имя B, созданный экземпляр всё ещё считается экземпляром класса A. Однако, невозможно сказать, имя экземпляра a или b, поскольку оба они связаны с одним и тем же значением.
Какой приоритет у оператора "запятая"

Запятая не является оператором в Python. Поскольку запятая - не оператор, но разделитель между выражениями, если бы было введено:
("a" in "b"), "a"
А не
"a" in ("b", "a")
То же самое верно и для операторов присваивания (=, += и другие). Они не являются операторами как таковыми, а лишь синтаксическими разделителями в операциях присваивания.
Как можно изменить строку?

Никак, поскольку строки неизменяемы. В большинстве ситуаций, нужно просто сделать новую строку из различных частей. Однако, если так нужно, можно использовать io.StringIO, либо модуль array.
Как использовать строки для вызова функций/методов

Существует несколько приёмов.
Лучший - использование словаря, ставящего соответствие строке функцию. Его главное достоинство - строки не обязаны совпадать с названиями функций. Использование встроенной функции getattr. И использование locals или eval (не рекомендуется).
Как удалить все символы новой строки в конце строки

Можно использовать S.rstrip("\r\n") для удаления символов новой строки, без удаления конечных пробелов.
Почему a_tuple[i] += ['item'] не работает, а добавление работает

Это из-за того, что расширенный оператор присваивания - оператор присваивания, а также из-за разницы между изменяемыми и неизменяемыми объектами в Python.
Примечание для словаря (dict) (ч.1)

Для того, чтобы объект мог быть ключом словаря, он должен быть хешируем. У кортежа, возможен случай, когда его элемент является не хешируемым объектом, и соответственно сам кортеж тогда тоже не является хешируемым и не может выступать ключом словаря.
Примечание для словаря (dict) (ч.2)

{} без значений создают словарь, а со значениями, в зависимости от синтаксиса могут создавать как множество, так и словарь.
Проверка принадлежности элемента данной коллекции c помощью оператора in

x in s — вернет True, если элемент входит в коллекцию s и False — если не входит
Есть и вариант проверки не принадлежности: x not in s, где есть по сути, просто добавляется отрицание перед булевым значением предыдущего выражения.
Обход всех элементов коллекции в цикле for in

В данном случае, в цикле будут последовательно перебираться элементы коллекции, пока не будут перебраны все из них.
Обработка элементов (ч.1)

Порядок обработки элементов для не индексированных коллекций будет не тот, как при их создании.

У прохода в цикле по словарю есть свои особенности.

При таком обходе словаря, перебираются только ключи равносильно for elm in my_dict.keys().
Обработка элементов (ч.2)

При желании можно пройти только по значениям. Но чаще всего нужны пары ключ(key) — значение (value).

Проход по .items() возвращает кортеж (ключ, значение), который присваивается кортежу переменных key, value.
Метод .index()

.index() — возвращает минимальный индекс переданного элемента для индексированных коллекций (строка, список, кортеж)
Метод .clear()

.clear() — метод изменяемых коллекций (список, словарь, множество), удаляющий из коллекции все элементы и превращающий её в пустую коллекцию.
Конвертация одного типа коллекции в другой

В зависимости от стоящих задач, один тип коллекции можно конвертировать в другой тип коллекции. Для этого, как правило достаточно передать одну коллекцию в функцию создания другой.
Особые методы сравнения множеств (set, frozenset)

set_a.isdisjoint(set_b) — истина, если set_a и set_b не имеют общих элементов.

set_b.issubset(set_a) — если все элементы множества set_b принадлежат множеству set_a, то множество set_b целиком входит в множество set_a и является его подмножеством (set_b — подмножество)

set_a.issuperset(set_b) — соответственно, если условие выше справедливо, то set_a — надмножество
Функции min(), max(), sum()

Функции min(), max() — поиск минимального и максимального элемента соответственно — работают не только для числовых, но и для строковых значений.

sum() — суммирование всех элементов, если они все числовые.
Возможная ошибка при обработке элементов

Не меняйте количество элементов коллекции в теле цикла во время итерации по этой же коллекции! — Это порождает не всегда очевидные на первый взгляд ошибки. Чтобы этого избежать подобных побочных эффектов, можно, например, итерировать копию коллекции.
Изменение элемента списка по индексу (ч.1)

Поскольку кортежи и строки у нас неизменяемые коллекции, то по индексу мы можем только брать элементы, но не менять их
Изменение элемента списка по индексу (ч.2)

А вот для списка, если взятие элемента по индексу располагается в левой части выражения, а далее идёт оператор присваивания =, то мы задаём новое значение элементу с этим индексом.
Синтаксис среза

Следует помнить, что взяв элемент по индексу или срезом (slice) мы не как не меняем исходную коллекцию, мы просто скопировали ее часть для дальнейшего использования (например добавления в другую коллекцию, вывода на печать, каких-то вычислений). Поскольку сама коллекция не меняется — это применимо как к изменяемым (список) так и к неизменяемым (строка, кортеж) последовательностям.