TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

TGINSIGHT SIMILAR POSTS

Најди сличен содржај

Изворен канал @pythonotes · Post #64 · 6 апр.

Думаете ˍˍfutureˍˍ нужен только для Python2? Нет, это процесс постоянный. В Python3 тоже есть свои "future". from __future__ import annotations Похоже на бекпорт аннотаций типов из Python3 в Python2, но это не так. Это имплементация PEP 563 Postponed Evaluation of Annotations которая будет дефолтной только в Python4. Что делает этот future? Если вы активно используете аннотации типов в Python3 то знаете, как они обычно выглядят. def func(x: int) -> int: return x * 2 При этом у объекта функции появляется атрибут ˍˍannotationsˍˍ >>> print(func.__annotations__) {'x': <class 'int'>, 'return': <class 'int'>} Видно, что в этой переменной находится словарь. Ключ словаря это имя аргумента функции, а значение это непосредственно ссылка на тип. А так же есть тип для return. В более сложных случаях это будут инстансы объектов из модуля typing from typing import List def func(x: int) -> List[int]: return [x] * 10 >>> print(func.__annotations__) {'x': <class 'int'>, 'return': typing.List[int]} Что происходит если мы импортим annotations из ˍˍfutureˍˍ? Изменяется способ определения аннотаций. Дело в том, что все эти инстансы типов создаются в момент определения функции когда модуль импортируется. Так же как и значения по умолчанию они должны исполниться и вернуть какой-то объект. В нашем случае это ссылка на тип int или инстанс класса typing.List. И тут возникает две проблемы, описаные в PEP. Если коротко то звучит это так: 1. Если в подсказке указывается тип, который еще не определён, это вызовет ошибку. Приходится описывать его просто строкой или менять порядок определения. 2. Определение ссылок на типы порой занимает много времени, так как требуется импорт модулей и создание инстансов. Но если вы импортируете наш future, то активируется так называемое отложенное определение ссылок (Postponed Evaluation of Annotations). В результате вместо создания инстансов и ссылок в ˍˍannotationsˍˍ просто записывается строка с этой подсказкой. from __future__ import annotations def func(x: int) -> int: return x * 2 >>> print(func.__annotations__) {'x': 'int', 'return': 'int'} В дальнейшем ваши IDE и ресолверы типов могут брать эти строки и исполнять самостоятельно где то на фоне, когда все необходимые типы уже определены. Для преобразования этих строк в привычный вид есть готовая функция >>> import typing >>> typing.get_type_hints(func) {'x': <class 'int'>, 'return': <class 'int'>} Но делать это можно уже только по необходимости. #pep

Hashtags

Резултати

Пронајдени 3 слични објави

Глобално пребарување

Futplanet

@Fut_planet · Post #11495 · 27.05.2024 г., 19:00

Pep Guardiola dejará el cargo de entrenador del Manchester City el próximo verano. 📱 Jack Gaughan. @Fut_planet⚜️#Pep👔#City🏴󠁧󠁢󠁥󠁮󠁧󠁿

Hashtags

AIGC

@aigcrubbish · Post #242 · 09.03.2026 г., 14:45

[$] Inspecting and modifying Python types during type checking Python 的静态类型系统有其独特之处:类型注解在运行时是可访问的,但默认不会被求值,其含义由外部类型检查器赋予。这些注解通常使用内置 `typing` 模块中的辅助工具,主流类型检查器对其含义有基本共识。然而,现有的类型系统在描述真实 Python 程序中常见的动态元编程模式时,能力仍显不足。PEP 827("类型操作")旨在为 Python 的类型系统增加新能力,以解决此问题,但社区对该提案的讨论意见不一。 原文链接:https://lwn.net/Articles/1061083/ #Python#类型系统#PEP#编程语言设计 #AIGC Read more