Python:快捷条件表达式

Python: shortcut conditional expression

快捷条件表达式:
expression1 如果 condition 否则 expression2
x=1 if a>3 else 2
但是:我可以在开头有 2 个表达式吗?
x=1,b=3 if a>3 else 2

感谢>idontknow,解决办法是>

    previousTime,BS_Count=(db_row_to_list[0][14],BS_Count+1) if db_row_to_list[0][14] is not None else (db_row_to_list[0][3],BS_Count)

不完全是。对于这种情况,可以使用 if 语句。

if a > 3:
    x = 1
    b = 3
else:
    x = 2
    b = None

如果你想让所有的东西都变成一条线,你可以在Python中使用元组拆包。元组拆包所做的基本上是从元组中取出元素并将它们存储为变量,而不是元组的元素。

这个概念的应用是这样的:

x, b = (1, 3) if a > 3 else (2, None)

注意是单线!

编辑: 在更新的上下文中回答您的问题:

您可以使用以下更短的代码。我想效果会是一样的。

a = 3
b = 7
c = 6
a, b = (8, b+1) if c > 3 else (5, b)
print(a, b)

声明x = 1, b = 3 if a > 3 else 2无效。你仍然可以有一个单线:

x, b = 1 if a > 3 else 2, 3 if a > 3 else 2

这会将 x 的值设置为 1 if a > 3 else 2,将 b 的值设置为 3 if a > 3 else 2

您可以使用 tuples:

>>> a = 4
>>> (x, b) = (1, 3) if a > 3 else (2, 2)
>>> x
1
>>> b
3
>>>

在你的例子中:

x=1 if a>3 else 2

条件表达式部分为:

1 if a>3 else 2

因此,您将该条件表达式的结果分配给 x

在你的第二个例子中,这是无效的语法:

x=1,b=3 if a>3 else 2

那是因为它等同于:

(1,b)=3 if a>3 else 2

或者,作为一个更简单的例子:

(1,b)=3

这是无效语法,因为您不能在 Python 中执行类似 1 = 3 的操作,而这正是该代码试图执行的操作。尽管如果元组的两个元素都不是文字,你会得到一个不同的错误:

(b,a)=3
TypeError: cannot unpack non-iterable int object

所以,如果你想用一个条件表达式做多个赋值,你可以让条件表达式 return 成为一个元组,让你的左边是你想要的两个变量的元组赋值给:

x,b=(1, 3) if a>3 else (2, 2)

这相当于:

if a > 3:
    x = 1
    b = 3
else:
    x = 2
    b = 2

这就是我假设您使用原始代码的目的。

对于上下文:这是实际代码>

     if db_row_to_list[0][14] is not None:  
        previousTime=db_row_to_list[0][14]    
        BS_Count+=1  
     else:  
        db_row_to_list[0][3] 

我可以做到这一点:即。使用功能 > 但它有什么更好的吗??

     num=3  
     num1=7
     def doIt():
        print("doIt()")
        global num,num1
        num=8
        num1+=1
        return num

     a=6
     num=doIt() if a>3 else 5
     print(num," ",num1)