gpt4 book ai didi

python - 简单的动态类型检查

转载 作者:行者123 更新时间:2023-11-28 21:52:45 26 4
gpt4 key购买 nike

是否有一种“标准”方法可以在 Python 中添加简单的动态类型检查,如:

def add(a, b):
# Argument type check
check(a, int)
check(b, int)
# Calculate
res = a + b
# Result type check and return
check(res, int)
return res

如果类型不匹配,check 会引发异常。

我当然可以自己做点东西,做 isinstance(..., ...)type(...) == ...,但是我想知道是否有一些“标准”模块用于这种类型检查。

如果还可以进行更复杂的类型检查,那就太好了,比如检查参数是 str 还是 int,或者例如 list str

我知道它在某种程度上违背了 Python 的 duck typing 原则,但由于参数类型错误,我只花了几个小时调试,而且它是一个大程序,所以原因显示出许多嵌套调用。

最佳答案

您可以使用装饰器函数。像这样:

def typecheck(*types):
def __f(f):
def _f(*args):
for a, t in zip(args, types):
if not isinstance(a, t):
print "WARNING: Expected", t, "got", a
return f(*args)
return _f
return __f

@typecheck(int, str, int)
def foo(a, b, c):
pass

foo(1, "bar", 5)
foo(4, None, "string")

输出(第二次调用)是

WARNING: Expected <type 'str'>, got None 
WARNING: Expected <type 'int'>, got 'string'

不过,就目前而言,这不适用于关键字参数。

编辑:谷歌搜索后,我发现了一些更复杂的类型检查装饰器 (1) (2)还支持关键字参数和返回类型。

关于python - 简单的动态类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27920380/

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