如何编写一个接受元素和该元素类型列表的Python函数?
我想知道怎么写一个Python函数,这个函数可以接收两个参数:一个是elt
(可以是任何类型),另一个是一个和elt
类型相同的元素列表。
def myfunction(elt, l: list[type(elt)]:
# some code here
我想避免像下面这样的情况:
for el in elt:
assert type(el) == type(elt)
2 个回答
0
如果这个问题是关于类型提示的,那么我们可以使用泛型。
from typing import TypeVar
T = TypeVar('T')
def myfunction(elt: T, lst: list[T]) -> list[T]:
return [*lst, elt] # or whatever it should return
myfunction(1, [1, 2, 3])
myfunction('a', ['a', 'b', 'c'])
myfunction(1, ['a', 'b', 'c']) # this will fail type check
Mypy检查会通过前两次对myfunction
的调用,但在第三次调用时会失败。
$ mypy code.py
code.py:12: error: Cannot infer type argument 1 of "myfunction" [misc]
Found 1 error in 1 file (checked 1 source file)
1
Python中的列表通常是同质的,也就是说,列表里的所有元素都是相同类型的。很多人会认为列表应该一直保持这样,但其实Python并没有强制要求这一点。
如果你想确保列表不仅是同质的,而且它的元素类型和某个参考点完全相同,那你就需要写一些代码来实现这个目标。
如果你只是想在调试时检查一下,那你可以使用 assert(),用法如下:
from typing import Any
def func(x: Any, y: list[Any]) -> None:
assert all(isinstance(x, type(_y)) for _y in y)