如何编写一个接受元素和该元素类型列表的Python函数?

1 投票
2 回答
63 浏览
提问于 2025-04-14 15:52

我想知道怎么写一个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)

撰写回答