Использование дженериков Python 3.12 и mypyPython

Программы на Python
Ответить
Anonymous
 Использование дженериков Python 3.12 и mypy

Сообщение Anonymous »

Я хочу добиться чего-то вроде этого:

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

from collections import deque
from typing import Iterable

import numpy as np

def mean[T](a: Iterable[T]) -> T:
s = sum(a)
return s * (1.0/len(a))

c = mean([1.0, 1.5])
print(c)

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = mean([a, b])
print(c)

print(mean((1,2,3)) )

d = deque([a,b])
print(mean(d))
но я хочу, чтобы этот код не только корректно работал – что сейчас и достигается, но и чтобы был принят mypy. На данный момент я не могу преодолеть такие ошибки:
mypy mypy_explore.py

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

    mypy_explore.py:8: error: Argument 1 to "sum" has incompatible type "Iterable[T]"; expected "Iterable[bool]"  [arg-type]
mypy_explore.py:9: error: Unsupported operand types for / ("float" and "int")  [operator]
mypy_explore.py:9: error: Argument 1 to "len" has incompatible type "Iterable[T]"; expected "Sized"  [arg-type]
mypy_explore.py:17: error: Incompatible types in assignment (expression has type "ndarray[Any, dtype[Any]]", variable has type "float")  [assignment]
Found 4 errors in 1 file (checked 1 source file)
Я протестировал множество методов, в том числе с использованием протокола, но ни один из них не увенчался успехом. Я чувствую, что этого должно быть легко достичь, должна быть просто последовательность любого типа, поддерживающая сумму и умножение на число. быть принято, но это не так...

Подробнее здесь: https://stackoverflow.com/questions/792 ... s-and-mypy
Ответить

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

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

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

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

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