🚀 5 крутых Python-фишек, о которых знают не все
Python — мощный и удобный язык, но даже опытные разработчики иногда не знают всех его возможностей. Сегодня я покажу пять полезны…
Читать далее →
Как быстро очистить список в Python?
Сегодня я покажу вам несколько способов очистки списка в Python и расскажу, какой вариант лучше в зависимости от ситуации.
1️⃣ Присвоение пус…
Читать далее →
Хешируемые объекты и метод __hash__ в Python
Чтобы объект можно было использовать в качестве ключа словаря, он должен быть хешируемым. Хешируемые объекты поддерживают метод __hash__, который возвращает целое число. Для получения хеша значения используется встроенная функция hash.
Встроенные типы, которые являются неизменяемыми, по умолчанию хешируемы. Все пользовательские объекты тоже хешируемы, но есть нюанс. Если вы определяете метод __eq__ для своего типа, то вы также должны определить __hash__ таким образом, чтобы hash(a) == hash(b) для всех a и b, которые считаются равными. Нарушение этого правила может привести к некорректной работе словаря:
class A:
def __init__(self, x):
self.x = x
def __hash__(self):
return random.randrange(10000)
def __eq__(self, other):
return self.x == other.x
d = {}
d[A(2)] = 2
d.get(A(2), 0)
# Вывод: 0
Обратите внимание: как только вы определяете __eq__ в классе, реализация __hash__ по умолчанию удаляется, так как она больше не подходит (по умолчанию все значения считаются неравными).
👉 @BookPython
Python поддерживает цепочные присваивания со следующим синтаксисом:
a = b = c = 42
Выглядит как цепочка присваиваний в C, но работает совершенно иначе. В C результат одного присв…
Читать далее →
Как отлаживать Python-код, не выходя из редактора - с помощью встроенного модуля pdb.
🔍 Быстрая отладка с pdb
Часто, когда код не работает как надо, мы начинаем закидывать print(…
Читать далее →