Введите аннотации для *args и **kwargs.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Введите аннотации для *args и **kwargs.

Сообщение Anonymous »

Я пробую аннотации типов Python с абстрактными базовыми классами для написания некоторых интерфейсов. Есть ли способ аннотировать возможные типы *args и **kwargs?

Например, как бы выразить, что разумное аргументами функции являются либо int, либо два int? type(args) дает Tuple, поэтому я предполагал аннотировать тип как Union[Tuple[int, int], Tuple[int]], но это не работает.< /p>

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

from typing import Union, Tuple

def foo(*args: Union[Tuple[int, int], Tuple[int]]):
try:
i, j = args
return i + j
except ValueError:
assert len(args) == 1
i = args[0]
return i

# ok
print(foo((1,)))
print(foo((1, 2)))
# mypy does not like this
print(foo(1))
print(foo(1, 2))
Сообщения об ошибках от mypy:

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

t.py: note: In function "foo":
t.py:6: error: Unsupported operand types for + ("tuple" and "Union[Tuple[int, int], Tuple[int]]")
t.py: note: At top level:
t.py:12: error: Argument 1 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
t.py:14: error: Argument 1 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
t.py:15: error: Argument 1 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
t.py:15: error: Argument 2 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
Возможно, mypy не нравится это для вызова функции, поскольку он ожидает наличия кортежа в самом вызове. Добавление после распаковки также приводит к ошибке ввода, которую я не понимаю.

Как аннотировать разумные типы для *args и **kwargs< /код>?

Подробнее здесь: https://stackoverflow.com/questions/370 ... and-kwargs
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Введите аннотации для *args и **kwargs.
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как мы можем распечатать список аргументов из args и kwargs?
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Что означают *args и **kwargs? [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Операторы SPLAT в JavaScript, эквивалентные *args и ** kwargs в Python?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Тип путаницы, аннотирование *args и ** kwargs
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

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