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)
快捷条件表达式:
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)