我有一连串的功能,全部定义在课程其他地方:
fus(roh(dah(inp)))
其中inp是字典或bool(False).
期望的结果是,如果inp或任何函数评估为False,则False由函数堆返回.
我试图使用三元运算符,但是它们不能正确评估.
def func(inp):
return int(inp['value']) + 1 if inp else False
抛出一个TypeError,bool不可下标,如果i == False,因为inp [‘value’]在条件之前被求值.
我知道我可以明确地做:
def func(inp):
if inp == False:
return False
else:
return inp['value'] + 1
但是有很多功能,这几乎是我代码长度的四倍.它也一次又一次地重写完全相同的代码行,这对我来说这是做错事的方式.
我怀疑有参数的装饰者是答案,但是我玩的越多,我就越不肯定.
def validate_inp(inp):
def decorator(func):
def wrapper(*args):
return func(inp) if inp else False
return wrapper
return decorator
@validate_inp(inp)
def func(inp):
return int(inp['value']) + 1
不幸的是,装饰器调用引发了一个NameError,’inp’没有定义.但我不知道我是否正在使用装饰器,或者装饰器是错误的解决方案.
寻找评论,批评,建议和/或健康检查.
如果你发现这个试图解决你自己的问题?
你可能想要使用空字典而不是布尔值False.道具到@chepner.
在我的应用程序中,使用False是“好的”,没有提供任何优势,并导致一些块状的代码块.
我发现一切都比较简单,使用一个空字典.我正在使用带有装饰器的函数,通过引用dict [‘value’],其中dict为空,捕获引发的KeyError.