海象运算符和三元运算符的正确语法是什么?
What is the correct syntax for Walrus operator with ternary operator?
查看 Python-Dev and Whosebug,Python 的三元运算符等效为:
a if condition else b
看了PEP-572 and Whosebug,明白了什么是海象算子:
:=
现在我试图将“海象运算符的赋值”和“三元运算符的条件检查”组合成一个语句,例如:
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.
我的问题是将海象运算符嵌入三元运算符的正确语法是什么?
从语法上讲,您只是少了一对括号。
do_something(list_of_roles) if (list_of_roles := get_role_list(username)) else "Role list is [] empty"
如果您查看语法,:=
被定义为 high-level namedexpr_test
结构的一部分:
namedexpr_test: test [':=' test]
而条件表达式是一种 test
:
test: or_test ['if' or_test 'else' test] | lambdef
这意味着 :=
不能用于 在 条件表达式中,除非它出现在嵌套表达式中。
对于寻找简短答案的人来说,因为大多数程序员 运行 很快,或者像我一样无法快速掌握已接受的答案:
>>> variable = foo if (foo := 'put parentheses here!') else 'otherwise'
>>> variable
put parentheses here!
查看 Python-Dev and Whosebug,Python 的三元运算符等效为:
a if condition else b
看了PEP-572 and Whosebug,明白了什么是海象算子:
:=
现在我试图将“海象运算符的赋值”和“三元运算符的条件检查”组合成一个语句,例如:
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.
我的问题是将海象运算符嵌入三元运算符的正确语法是什么?
从语法上讲,您只是少了一对括号。
do_something(list_of_roles) if (list_of_roles := get_role_list(username)) else "Role list is [] empty"
如果您查看语法,:=
被定义为 high-level namedexpr_test
结构的一部分:
namedexpr_test: test [':=' test]
而条件表达式是一种 test
:
test: or_test ['if' or_test 'else' test] | lambdef
这意味着 :=
不能用于 在 条件表达式中,除非它出现在嵌套表达式中。
对于寻找简短答案的人来说,因为大多数程序员 运行 很快,或者像我一样无法快速掌握已接受的答案:
>>> variable = foo if (foo := 'put parentheses here!') else 'otherwise'
>>> variable
put parentheses here!