Скажем, вы хотите получить первые N элементов итерируемого объекта. Прямолинейный способ — использовать
Если вы также хотите получить индексы элементов, можно применить
Другой способ сделать это — использовать
📲 Мы в MAX
👉@BookPython
islice:
from itertools import islice
def fib():
a, b = 0, 1
while True:
yield b
a, b = b, (a + b)
list(islice(fib(), 5))
# Результат: [1, 1, 2, 3, 5]
Если вы также хотите получить индексы элементов, можно применить
enumerate:
list(enumerate(islice(fib(), 5)))
# Результат: [(0, 1), (1, 1), (2, 2), (3, 3), (4, 5)]
Другой способ сделать это — использовать
zip и range, что может показаться более читаемым:
list(zip(range(5), fib()))
# Результат: [(0, 1), (1, 1), (2, 2), (3, 3), (4, 5)]
👉@BookPython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
collections.defaultdict позволяет создать словарь, который возвращает значение по умолчанию, если запрашиваемого ключа нет (вместо того чтобы выбрасывать исключение KeyError).При создании
defaultdict необходимо указывать не само значение по умолчанию, а фабрику для его создания.Это позволяет создавать словари с бесконечным числом вложенных уровней, что дает возможность писать что-то вроде
d[a][b][c]...[z].
>>> def infinite_dict():
... return defaultdict(infinite_dict)
...
>>> d = infinite_dict()
>>> d[1][2][3][4] = 10
>>> dict(d[1][2][3][5])
{}
Такое поведение называется “автовивификация” (от англ. autovivification) — термин пришёл из языка Perl.
👉@BookPython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Некоторые модули Python компилируются непосредственно в сам интерпретатор. Они называются встроенными модулями (built-in), и их не следует путать со стандартной библиотекой. Чтобы получить полный список таких модулей, можно использовать
Обычно вам не важно, является ли модуль встроенным или нет; однако стоит иметь в виду, что
📲 Мы в MAX
👉@BookPython
sys.builtin_module_names. Примеры таких модулей — sys, gc, time и т. д.Обычно вам не важно, является ли модуль встроенным или нет; однако стоит иметь в виду, что
import сначала ищет модуль среди встроенных. Поэтому будет загружен встроенный модуль sys, даже если в текущей директории есть файл sys.py. С другой стороны, если, например, в текущей директории есть файл datetime.py, он действительно может быть загружен вместо стандартного модуля datetime.👉@BookPython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
В Python 3, после выхода из блока
Если нужно сохранить ссылку на исключение, используйте другую переменную:
В Python 2 это правило не действует.
📲 Мы в MAX
👉@BookPython
except переменные, в которых хранятся перехваченные исключения, удаляются из locals(), даже если они существовали раньше:
>>> e = 2
>>> try:
... 1/0
... except Exception as e:
... pass
...
>>> e
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'e' is not defined
Если нужно сохранить ссылку на исключение, используйте другую переменную:
>>> error = None
>>> try:
... 1/0
... except Exception as e:
... error = e
...
>>> error
ZeroDivisionError('division by zero',)
В Python 2 это правило не действует.
👉@BookPython
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1