Если вы хотите перехватить и IndexError, и KeyError, вы можете и должны использовать LookupError — их общего предка. Это оказывается полезным при работе со сложными вложенными данн…
Читать далее →
Каждый класс Python имеет два «магических» атрибута, которые можно использовать для получения информации о его базовых классах.
Первый — __bases__; он возвращает непосредственных …
Читать далее →
В Python операторы += и + являются разными.
В Python операторы += и + являются разными. За их поведение отвечают методы __iadd__ и __add__ соответственно.
class A:
def __init__(self, x):
self.x = x
def __iadd__(self, another):
self.x += another.x
return self
def __add__(self, another):
return type(self)(self.x + another.x)
Если __iadd__ не определён, выражение a += b сводится к простому a = a + b.
Обычно разница между += и + в том, что первый изменяет объект, а второй создаёт новый:
>>> a = [1, 2, 3]
>>> b = a
>>> a += [4]
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> a = a + [5]
>>> a
[1, 2, 3, 4, 5]
>>> b
[1, 2, 3, 4]
👉 @BookPython
В Python блок else может располагаться не только после if, но и после for и while. Код внутри else выполняется, если цикл не был прерван оператором break.
Обычный способ использов…
Читать далее →
Начиная с Python 3.0, при возникновении нового исключения внутри блока except перехваченное исключение автоматически сохраняется в атрибуте __context__ создаваемого исключения. В р…
Читать далее →