python-3.x Walrus运算符与三元运算符的正确语法是什么?

iyfjxgzm  于 2022-12-24  发布在  Python
关注(0)|答案(2)|浏览(134)

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

a if condition else b

看看PEP-572StackOverflow,我明白了什么是Walrus运算符:

:=

现在,我尝试将“海象运算符的赋值”和“三元运算符的条件检查”合并到一个语句中,如下所示:

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。
我的问题是在三元运算符中嵌入海象运算符的正确语法是什么?

gstyhher

gstyhher1#

从句法上讲,你只是少了一对括号。

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

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

ar7v8xwq

ar7v8xwq2#

对于那些寻找简短答案或未能像我一样迅速掌握公认答案的人:

>>> variable = foo if (foo := 'parentheses!!') else 'otherwise'
>>> #                 ▲                      ▲
>>> #                 ╰──────────────────────╯
>>> variable
parentheses!!

相关问题