Zen of Python
20.1K subscribers
1.22K photos
164 videos
32 files
3.17K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
加入频道
Интерпретатор теперь указывает на причину ошибки точнее

В новой версии Python 3.11.4 при отображении пути ошибки (Traceback) вы легче сможете обнаружить причину ошибки, потому что символами ^ теперь выделяется конкретный объект, а не вся строка:

Traceback (most recent call last):
File "distance.py", line 11, in <module>
print(manhattan_distance(p1, p2))
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "distance.py", line 6, in manhattan_distance
return abs(point_1.x - point_2.x) + abs(point_1.y)
^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'x'

Подробнее о релизе здесь.

#лучшиепрактики
👍211
PEP8: словно и не менялось ничего с прошлой версии

В своей статье Егор Егоров доступным языком обозревает обновления в стандарте PEP версии 8. Вы узнаете, какую максимальную длину строки рекомендуют создатели, для каких объектов ЯП при именовании использовать строчные, а для каких — заглавные буквы. Узнаете, для чего придумали линтеры.

А вы бы добавили какой-нибудь принцип? Поделитесь в комментариях.

#PEP
👎102
pyproject.toml вместо pyproject.cfg

В PEP-518 предложили хранить конфиги для всех инструментов в файле pyproject.toml, в разделе tool.TOOL_NAME. Например:

[tool.mypy]
файлы = ["мой_проект"]
версия_python = 3.8

На данный момент почти все популярные инструменты так или иначе поддерживают pyproject.toml в качестве конфигурационного файла: mypy, pytest, cover, isort, bandit, tox и т. д. Единственное исключение — flake8.

До .toml многие инструменты использовали setup.cfg для той же цели, но этот формат имеет несколько недостатков: он плохо стандартизирован, и единственным поддерживаемым типом значений является строка.

#PEP
9👍2
Typing Self: интуитивно понятный способ аннотирования методов, возвращающих экземпляр своего класса

Ведёт себя так же, как TypeVar, но более краток и прост:

Допустим, мы создали метод get_scale(), который возвращает экземпляр того же класса Scale с помощью self:

class Shape:
def set_scale(self, scale: float):
self.scale = scale
return self

Shape().set_scale(0.5) # => Экземпляр класса Shape

Один из способов обозначить тип возвращаемого значения — указать его как текущий класс Shape. Использование этого метода заставляет средство проверки типов выводить тип Shape, как и ожидалось:

class Shape:
def set_scale(self, scale: float) -> Shape:
self.scale = scale
return self

Shape().set_scale(0.5) # => Shape
...

PEP-673

#pep
👍6👎5
PEP 731: функции Python внутри другого языка

13 октября на официальном сайте Python вышла черновая версия нового PEP (предложения по развитию Python). Она посвящена развитию API, который позволяет вызывать Py-функции прямо в коде на С. Это в свою очередь, позволяет создавать высокоскоростные низкоуровневые интерфейсы между Python и другими языками.

Интересная инициатива, учитывая разнообразие пользователей ЯП. В последних интервью ван Россум неоднократно упоминает, что именно противоречия в рамках комьюнити замедляют развитие языка.

Как думаете, получится у этой рабочей группы Core Developers?

#pep
8
Вышел Python 3.14.0a4

Среди фичей:
«Ленивая» интепретация аннотаций (на скриншоте, см. документацию);
API языка C вместо C-подобных методов и функций;
— Депрекатнули PGP-подписи и проч.

Это ранняя версия ЯП для тестирования разработчиками.

Release Note

#факт

@zen_of_python
👍52