在Python中是否可以输入一个使用任意大小的参数列表的第一个元素的函数

问题描述 投票:0回答:1

我有一个 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

python mypy typing
1个回答
0
投票

我想这就是你的想法:

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)
    是类型生成器而不是元组。
© www.soinside.com 2019 - 2024. All rights reserved.