gpt4 book ai didi

Python:一次用于多个参数的TypeVar

转载 作者:行者123 更新时间:2023-12-05 05:01:36 25 4
gpt4 key购买 nike

有没有办法让 TypeVar(或其他格式)捕获函数的所有参数?例如,假设我想包装一个通用函数,这样它的所有参数都在一个元组中给出:

def invoke(f: Callable[..., T], args: Tuple[...]) -> T:
return f(*args)

只是我将让静态类型检查强制 元组 的内容具有相同的类型,而不是省略号 (...)作为函数的参数。

谢谢。

最佳答案

您可以修改以下内容以满足您的要求,您可能需要添加额外的处理。

from typing import Any

class TypeEnforce:
def __init__(self, func):
self.func = func
def __call__(self, *args):
types = dict(zip(self.func.__annotations__.values(), args))
for k, v in types.items():
if k is Any:
continue
assert type(v) == k
self.func(*args)

例子

@TypeEnforce
def my_test(x: str, y: int) -> None:
print(f"'x' is a {type(x).__name__}")


@TypeEnforce
def my_other_test(x: Any):
return x

my_test("Test", "eight")
my_other_test("Test2")

将导致 AssertionError 因为函数 my_test 采用 (str, int) 但被传递 ( str, str).也会有一些边缘情况,其中 TypedDict 的提示总是会失败,因为它不是真正的类型,而是 dict 的语法糖。

关于Python:一次用于多个参数的TypeVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62652553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com