Аннотация типа Python 3.6 в PyCharm относительно `generator.send (None)`

Я пытаюсь правильно ввести аннотирование кода в моем текущем проекте. Сюда входят генераторы, которые получают значения через .send(). Перед итерацией этим генераторам отправляется None, чтобы они могли перейти к первому yield..

Насколько я понимаю, правильная аннотация типа для генератора, который выдает TYPE_A, принимает TYPE_B и возвращает None, будет

Generator[TYPE_A, TYPE_B, None]

Однако, поскольку первое значение, отправленное в генератор, может быть None, я решил, что более подходящим будет следующее.

Generator[TYPE_A, Optional[TYPE_B], NONE]

В PyCharm это прекрасно работает в самом простом случае.

def f(g: Generator[str, Optional[int], None]):
    g.send(None)

None, отправленный генератору, помечается PyCharm как противоречие типа только если я заменю Optional[int] на int.

Все идет нормально. Однако, если я расширю эту идею с помощью дженериков, либо PyCharm запутается, либо я. Рассмотрим следующий случай.

(Согласно с

Table = Dict[int, T]     # Table is generic
Messages = Table[bytes]  # Same as Dict[int, bytes]

из эта секция в PEP483 Я считаю, что следующий код должен быть правильно аннотирован. На этот раз со всем импортом для легкого копирования и вставки.)

from typing import TypeVar, Tuple, Generator, Optional

TYPE_A = TypeVar("TYPE_A")
TYPE_B = TypeVar("TYPE_B")
TUPLE_A = Tuple[TYPE_A, float]
GENERATOR_A = Generator[TUPLE_A, Optional[TYPE_B], None]
GENERATOR_B = Generator[TYPE_B, Optional[TUPLE_A], None]

def example_interactive(system_a: GENERATOR_A[int, str], system_b: GENERATOR_B[str, int]):
    system_b.send(None)
    system_a.send(None)

Идея состоит в том, что TUPLE_A имеет один общий тип TYPE_A, а GENERATOR_A и GENERATOR_B имеют по два (одна переменная непосредственного типа и одна опосредована через TUPLE_A).

Аннотация типа Python 3.6 в PyCharm относительно `generator.send (None)`

К сожалению, PyCharm говорит мне, что это не работает. Подскажите, пожалуйста, неправильно ли я что-то понял или аннотации типов просто неправильно интегрированы в PyCharm?

PyCharm плохо справляется с такой подстановкой переменных типа. Не стесняйтесь сообщать о проблеме здесь, возможно, Эта проблема имеет отношение.

user2235698 07.09.2018 15:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
61
0

Другие вопросы по теме