我正在尝试找到一种方法来在if语句中一行完成两个动作,我可以在if语句单线执行中找到很多答案来执行一个动作,但对此却没有。可能吗我尝试过类似的操作,但由于ValueError失败-无法解压缩太多值(预期2)。谢谢。
g, er = "id", "err" if no_of_errs <= 1 else "ppd", "ers"
答案 0 :(得分:6)
Python正在像这样查看您的代码:
g, er = ( "id" ) , ( "err" if no_of_errs <= 1 else "ppd" ) , ( "ers" )
要拆包的3件东西,只需2件即可打包。
错误的原因是操作员优先,您可以阅读很多冗长的文本here或在Google上搜索它,然后找到类似here的表格。
通过用括号使元组显式来解决此问题:
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)
输出:
id err
ppd ers
使用显式元组,不再造成操作员混乱,并且可以正常工作。
google的关键字:operator
priority
precedence
或其他类似字词