我有一个 Python 函数,可以检索任意数量的 *args 的第一个元素:
def get_first(*args):
return (a[0] for a in args)
假设我按如下方式调用此函数:
b = (1, 2, 3)
c = ("a", "b", "c", "d")
x = get_first(b, c)
我期待类型
Tuple[int, str]
。对我来说,似乎不可能实现正确的打字来准确地揭示这种类型。
我没有运气使用
TypeVarTuple
PEP 646 或 Paramspec
PEP 612。
我想这就是你的想法:
def get_first(*args):
els = tuple(a[0] for a in args)
types = tuple(type(el).__name__ for el in els)
return els, types
b = (1, 2, 3)
c = ("a", "b", "c", "d")
x, types = get_first(b, c)
x, types = get_first(b, c)
print(f"Tuple[{', '.join(types)}]")
a = ([1, 2, 3], "key", "val")
b = (1, 2, 3)
c = ("a", "b", "c", "d")
x, types = get_first(b, c, a)
print(f"Tuple[{', '.join(types)}]")
Tuple[int, str]
Tuple[int, str, list]
return (a[0] for a in args)
是类型生成器而不是元组。