为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以评估函数返回是否在列表中,否则返回默认值?

是否可以评估函数返回是否在列表中,否则返回默认值?

繁华开满天机 2023-08-08 10:23:59
如果我有一个返回某个值的函数,并且我只想在允许的列表中分配该值,否则使用默认值。假设我无法修改该功能。即这有效,但它调用该函数两次。def some_func():    return 'foo'allowed_list = ['foo', 'bar']value = some_func() if some_func() in allowed_list else 'default'有没有一种Python式的方法可以在一行中设置值而无需调用函数两次?
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

从 Python 3.8开始:

value = x if (x:=foo()) in allowed_list else 'default'


查看完整回答
反对 回复 2023-08-08
?
MM们

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"


查看完整回答
反对 回复 2023-08-08
?
蝴蝶刀刀

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


查看完整回答
反对 回复 2023-08-08
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信