首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有三值运算符的Walrus运算符的正确语法是什么?

有三值运算符的Walrus运算符的正确语法是什么?
EN

Stack Overflow用户
提问于 2020-08-06 18:16:02
回答 2查看 3K关注 0票数 9

看看Python-DevStackOverflow,Python的三值操作符等价于:

代码语言:javascript
复制
a if condition else b

看看佩普-572StackOverflow,我明白Walrus操作符是什么:

代码语言:javascript
复制
:=

现在,我试图将"walrus运算符的赋值“和”三值运算符的条件检查“合并为一条语句,如下所示:

代码语言:javascript
复制
other_func(a) if (a := some_func(some_input)) else b

例如,请考虑下面的片段:

代码语言:javascript
复制
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。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-06 18:21:55

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

代码语言:javascript
复制
do_something(list_of_roles) if (list_of_roles := get_role_list(username)) else "Role list is [] empty"

如果您查看语法,:=被定义为高级namedexpr_test结构的一部分:

代码语言:javascript
复制
namedexpr_test: test [':=' test]

而条件表达式是一种test

代码语言:javascript
复制
test: or_test ['if' or_test 'else' test] | lambdef

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

票数 16
EN

Stack Overflow用户

发布于 2022-05-12 12:33:21

对于那些想要一个简短的答案或者没能像我一样快速地理解被接受的答案的人:

代码语言:javascript
复制
>>> variable = foo if (foo := 'parentheses!!') else 'otherwise'
>>> #                 ^                      ^
>>> #                 └──────────────────────┘
>>> variable
parentheses!!
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63289494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档