3 回答
TA贡献1886条经验 获得超2个赞
如果您喜欢做一些过度的事情来完成简单的任务(赋值表达式/海象运算符),请定义一个装饰器来为您处理返回值:
allowed_list = ['foo', ]
def check_return_value(fn):
def inner(*args, **kwargs):
result = fn(*args, **kwargs)
return result if result in allowed_list else 'default'
return inner
# suppose this name is imported from somewhere else and you can't use @ syntax
def some_func():
return 'boo'
some_func = check_return_value(some_func)
var = some_func()
print(var) # prints "default"
TA贡献1801条经验 获得超8个赞
只要您仅限于 Python 3.6 并且不能使用赋值表达式,您就可以为自己创建一个辅助函数来处理这个问题。
def some_func():
return 'foo'
def default_if_invalid(value, allowed_values, default):
return value if value in allowed_values else default
allowed_list = ['foo', 'bar']
value = default_if_invalid(some_func(), allowed_list, 'default')
None如果您始终检查相同的允许值列表,或者如果您希望该方法在未提供默认值的情况下提供默认值(也许),则可以轻松修改此值。例如:
def default_if_invalid(value, default=None):
allowed_list = ['foo', 'bar']
return value if value in allowed_values else default
value = default_if_invalid(some_func()) # sets to None if not in list
value = default_if_invalid(some_func(), 'default') # specifies a default
添加回答
举报