math
есть особый объект, который называется NaN
(Not a Number).NaN
не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.'nan'
во float
. Кстати говоря, это значит что вы можете использовать NaN
в качестве ключа в словаре (хотя мы и не советуем это делать).prettytable
, который позволяет красиво выводить таблицы.table.field_names
. А добавлять строки с данными в таблицу можно методом table.add_row([])
, передавая туда список элементов.table.get_string()
.int
, unicode.isdecimal
и даже re.match
.==
и is
в приложениях могут возникнуть странные ошибки.==
проверяет равенство значений двух объектов. А оператор is
проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти.get
у словарей. Его основной плюс заключается в том, что он принимает опциональный аргумент, отвечающий за значение по умолчанию. Ruff
— Чрезвычайно быстрый линтер и форматер кода на Python
, написанный на Rust
.Ruff
является его скорость. Ruff
в 10-100 раз быстрее аналогов. В сравнении с flake8
, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear
и т.д.). Также Ruff
совместим с Black
«из коробки».Ruff
может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort
.calendar
есть функция month()
, которая вернет календарь указанного месяца в виде строки, как показано в примере. А функция calendar()
выдаст целый год.tqdm
является простым и лаконичным вариантом.range
можно заменить на trange
для визуализации прогресса. А для итерации по какой-либо последовательности, достаточно просто передать её в функцию tqdm
. Также модуль хорошо себя зарекомендовал и в Jupyter Notebook.tqdm
произошло от арабского слова "taqaddum" (تقدّم), которое означает "прогресс," а также это ещё и сокращение от "я тебя сильно люблю" на испанском (te quiero demasiado).__enter__
и __exit__
. Но такой подход может показаться слегка сложным.@contextmanager
из встроенного пакета contextlib
.tag
, которая идёт до yield
, выполняется при входе в блок with
. Затем исполняется сам этот блок, а после этого завершается оставшаяся часть, которая идет после yield
.__mro__
. Он говорит о том, что если мы в примере выше попробуем обратиться к атрибуту value
, Python будет искать сначала в классе A
, далее в B
, затем в C
и в самом конце в object
. 10000000
и 100000000
. Использовать запятые, как в английском языке, не получится.1_000_000
будет интерпретироваться как целое число 1000000
.pathlib
, позволяющий осуществлять различную работу с файловыми путями. Path
, с объектами которого уже можно производить операции. Например, методы exists()
и is_dir()
проверяют, существует ли файл и является ли он директорией. os.path.join()
на более удобный и элегантный вариант с использованием слэшей, как показано на картинке. pathlib
может стать частичной заменой os
в некоторых случаях при работе с файловыми путями. spellchecker
позволяет находить опечатки в тексте и даже дает возможные варианты исправлений. SpellChecker
и его методов correction
и candidates
показаны на картинке. string
из стандартной библиотеки содержит интересный класс Template
, который позволяет вполне удобно создавать шаблоны строк для дальнейшего форматирования.format
, но всё же о Template
стоит хотя бы знать на случай, если придется работать с легаси кодом.pip
.PrettyTable
из этого модуля. Задать название для столбцов можно с помощью атрибута fields_name
. Строки в таблицу добавляются путем вызова метода add_row
.prettytable
позволяет регулировать различные параметры, сортировать данные, работать с html
, а также взаимодействовать с csv
и sql
таблицами. Так что возможностей у этого модуля предостаточно.pytest
— ближе по духу к Python нежели unittest
, который накладывает определенные обязательства при разработке тестов. Например, создание классов-наследников от TestCase или выполнение определенной процедуры запуска тестов. pytest
ничего этого делать не нужно. Вы просто пишете функции, которые должны начинаться с "test_" и используете assert, встроенные в Python. unittest
и nose
, то есть полная обратная совместимость с ними.RecursionError
во время создания рекурсивных алгоритмов. sys
можно посмотреть и даже изменить максимальную глубину рекурсии. Хотя делать это слегка опасно, так как каждый новый вызов занимает много памяти. zip
файлами можно использовать встроенный модуль zipfile
. Если кто не помнит, то zip
файл — это архив, содержащий сжатые файлы. printdir
, а извлечь все файлы можно вызвав extractfile
. zip
архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию.