из __future__ импорт аннотаций - PullRequest
1 голос
/ 01 мая 2020

Python до c будущее

В python до c о будущее есть таблица ниже где он показывает, что аннотации «необязательны в» 3.7.0b1 и «обязательны в» 4.0, но я все еще могу использовать аннотации в 3.8.2 без импорта аннотаций, тогда для чего он нужен.

>>> def add_int(a:int, b:int) -> int:
...     return a + b
>>> add_int.__annotations__
{'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}

Я сомневаюсь, что не совсем понимаю значение слов «необязательный в» и «обязательный» здесь

1 Ответ

2 голосов
/ 01 мая 2020

Обязательный выбор интересного слова. Я думаю, это означает, что это по умолчанию на языке. Вам не нужно включать его с помощью from __future__ import annotations

Функция annotations относится к PEP 563: Отложенная оценка аннотаций. Это расширение существующей функции аннотаций , которая изначально была представлена ​​в python 3.0 и переопределена как подсказки типа в python 3.5, поэтому ваш код работает под python 3.8 .

Вот что необязательно from __future__ import annotations изменения в python 3.7 +:

class A:
    def f(self) -> A: # NameError: name 'A' is not defined
        pass

, но это работает

from __future__ import annotations

class A:
    def f(self) -> A:
        pass

См. это Глава в python 3.7. Что нового в отложенных аннотациях:

Поскольку это изменение нарушает совместимость, необходимо включить новое поведение для каждого модуля в Python 3.7, используя __future__ импорт:

from __future__ import annotations

По умолчанию Python 4.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...