Python一行if语句有两个动作

Gop*_*h S 2 python if-statement python-3.x

我试图找到一种方法来在一行中完成两个动作if语句,我可以找到很多答案来执行if语句中的单个动作,但不是这样.它甚至可能吗?我试过这样的东西,但是失败了,因为ValueError - 解压缩的值太多了(预期2).谢谢.

g, er = "id", "err" if no_of_errs <= 1 else "ppd", "ers"
Run Code Online (Sandbox Code Playgroud)

Pat*_*ner 6

Python正在查看你的代码:

 g, er = ( "id" )  ,  ( "err" if no_of_errs <= 1 else "ppd" )   , ( "ers" )
Run Code Online (Sandbox Code Playgroud)

打开3件事,只打包2件.

错误背后的原因是操作员优先级,您可以在这里阅读大量的lenghty文本 或google它并找到像这里的表格.


通过使用括号显示元组来修复它:

no_of_errs = 0
g, er = ("id", "err") if no_of_errs <= 1 else ("ppd", "ers")
print(g,er)

no_of_errs = 10
g, er = ("id", "err") if no_of_errs <= 1 else ("ppd", "ers")
print(g,er)
Run Code Online (Sandbox Code Playgroud)

输出:

id err
ppd ers
Run Code Online (Sandbox Code Playgroud)

使用显式元组,不再有操作员混淆并且它可以工作.


谷歌的关键词:operator priority precedence或类似的