如何输入提示返回 zip 对象的函数?

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

我有一个函数,它接受任意数量的列表(或任何可迭代的列表)并将它们排序为一个。代码如下所示:

def sort_as_one(*args):
    return zip(*sorted(zip(*args)))
def main():
    list1 = [3, 1, 2, 4]
    list2 = ["a", "b", "d", "e"]
    list3 = [True, False, True, False]
    result = sort_as_one(list1, list2, list3)
    # <zip object at ...>
    print(result)
    list1, list2, list3 = result
    print(list1, list2, list3)
if __name__ == "__main__":
    main()

如何准确键入提示函数输出?

python type-hinting
1个回答
7
投票

zip
对象是一个迭代器——它遵循迭代器协议。按照惯用方式,您可能只需输入提示即可。在这种情况下,您希望使用类型变量将其作为泛型类型提示:

import typing

T = typing.TypeVar("T")

def sort_as_one(*args: T) -> typing.Iterator[T]:
    return zip(*sorted(zip(*args)))

注意,如果您使用可变参数,则必须只接受单一类型。在这种情况下,您可以做的最好的事情就是使用

Any
而不是
T
。但是,如果您希望能够将其与静态类型检查器一起使用,则应该考虑在代码中仅使用类似上面的函数。

© www.soinside.com 2019 - 2024. All rights reserved.