带有三元运算符的海象运算符的正确语法是啥?

Posted

技术标签:

【中文标题】带有三元运算符的海象运算符的正确语法是啥?【英文标题】:What is the correct syntax for Walrus operator with ternary operator?带有三元运算符的海象运算符的正确语法是什么? 【发布时间】:2020-11-27 01:33:47 【问题描述】:

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

a if condition else b

看了PEP-572和***,我明白什么是海象算子了:

:=

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

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

例如,请考虑下面的sn-p:

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。

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

【问题讨论】:

那你试过了吗?发生了什么? @Chris,是的,我确实尝试过。我可能想到的所有排列和组合都以语法错误结束。很久之后,我放弃了。 我已经更新了我的问题。很抱歉之前错过了信息。作为菜鸟的缺点。 :-( 【参考方案1】:

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

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

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

【讨论】:

如有疑问,请添加一些括号。多年来我发现一条非常方便的规则。

以上是关于带有三元运算符的海象运算符的正确语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

三元表达式是啥?

爪哇“?”用于检查 null 的运算符 - 它是啥? (不是三元!)

为啥带有 some 方法的三元运算符会使此语句为假?

多个三元运算符

将三元运算符拆分为多行的推荐布局是啥?

Java三元运算符语法[重复]