Python 如何使用if条件捕获函数返回值

Python 如何使用if条件捕获函数返回值,python,python-3.x,function,Python,Python 3.x,Function,我想捕获func1()的返回值。 是否可以编写一行代码,而不调用两次func1()?如果使用的是Python 3.8,则可以使用赋值表达式: def func1(): if my_api_success(): return my_api_value else return None x= 1 if func1() is None else func1() x = 1 if (value := func1()) is None else valu

我想捕获
func1()
的返回值。
是否可以编写一行代码,而不调用两次
func1()

如果使用的是Python 3.8,则可以使用赋值表达式:

def func1():
    if my_api_success():
        return my_api_value
    else
        return None

x= 1 if func1() is None else func1()
x = 1 if (value := func1()) is None else value
如果您使用的是较早的Python版本,则可以将
next
函数与一个生成器表达式一起使用,该生成器表达式迭代
func1()
的1元组,以实现与赋值表达式相同的效果:

def func1():
    if my_api_success():
        return my_api_value
    else
        return None

x= 1 if func1() is None else func1()
x = 1 if (value := func1()) is None else value

最好的方法是按照@CharlieWindolf的建议使用:

x = next(1 if value is None else value for value in (func1(),))
问题在于,它需要
func1()
返回python视为布尔值的值

要解决这个问题,需要使用两行代码

x = func1() or 1
在Python3.8中,这可能是可以使用的,但我还没有测试它

y = func1()
x = 1 if y is None else y

为什么不在没有条件的情况下,只返回您试图检查条件的值呢

或者你可以: X=func1()

如果X是none X=1,它肯定会调用它两次。不过有。您可以执行
x=func1()或1
。为什么不只用两行呢?我想不出什么好理由。Python3.8将具有赋值表达式,这将允许这样做。因此,请使用Python3.8,或者只使用两行代码。即使您使用的是Python3.8,您可能也应该只使用两行。@CharlieWindolf:<如果
func1()
可以返回
0
或其他错误值,则code>或将是错误的。这是一个很好的观点。所以,是的,可能两行更好。
func1
应该在失败时引发异常,而不是返回
None