6

查看Python-DevStackOverflow,Python 的三元运算符等价物是:

a if condition else b

查看PEP-572StackOverflow,我了解海象运算符是什么:

:=

现在我试图将“海象运算符的赋值”和“三元运算符的条件检查”组合成一个语句,例如:

other_func(a) if (a := some_func(some_input)) else b

例如,请考虑以下代码段:

do_something(list_of_roles) if list_of_roles := get_role_list(username) else "Role list is [] empty"

我没有围绕语法来思考。尝试了各种组合,每次解释器抛出SyntaxError: invalid syntax. 我的python版本是3.8.3。

我的问题是将海象运算符嵌入三元运算符的正确语法是什么?

4

1 回答 1

11

从语法上讲,您只是缺少一对括号。

do_something(list_of_roles) if (list_of_roles := get_role_list(username)) else "Role list is [] empty"

如果您查看语法,则将:=其定义为高级namedexpr_test构造的一部分:

namedexpr_test: test [':=' test]

而条件表达式是一种test

test: or_test ['if' or_test 'else' test] | lambdef

这意味着:=不能条件表达式中使用,除非它出现在嵌套表达式中。

于 2020-08-06T18:21:55.407 回答