Можно ли создавать списки типа объединения с помощью оператора умножения?Python

Программы на Python
Ответить
Anonymous
 Можно ли создавать списки типа объединения с помощью оператора умножения?

Сообщение Anonymous »

Я использую PyRight и (до сих пор) с радостью учу студентов создавать списки с помощью «умножения», например 44 * [Нет]. Однако, когда результирующий список имеет тип, скажем, List[Union[int, None]], я не нашел способа убедить PyRight приписать тип Union[int, None] элементу None во внутреннем списке, и в результате PyRight обеспокоен тем, что я пытаюсь навязать ковариацию списка, чтобы назначить тип List[Union[int, None]] списку, который имеет псевдоним в другом месте как имеющий тип Список[Нет]. Я пробовал различные способы оформления внутреннего None, чтобы указать PyRight, что его всегда следует рассматривать как Union[int, None], но мне пока это не удалось.
Вот пример кода, чтобы показать, что я имею в виду:

Код: Выделить всё

from typing import List, Union

def new_thingy() -> List[Union[int,None]]:
# attempt number one: PyRight indicates type error:
l : List[Union[int,None]] = 4 * [None]
# attempt number two: same problem
m : Union[int,None] = None
n : List[Union[int,None]] = 4 * [m]
# attempt number three, works but doesn't scale:
o : List[Union[int,None]] = [None,None,None,None]
# works - steer students away from multiplication?
p : List[Union[int,None]] = [None for _ in range(4)]
return p
Я много работал с Typed Racket, где обычно можно скрыть приписывание типа (то есть что-то вроде формы (foo : Bar) вокруг внутреннего значения, чтобы убедить средство проверки типов рассмотреть возможность использования этого типа. Есть ли у PyRight форма приписывания типа на уровне выражения, которую я еще не обнаружил?
>

Подробнее здесь: https://stackoverflow.com/questions/798 ... n-operator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»