您可以在Python 3.8“ Walrus”运算符中使用就地运算符吗?

时间:2020-03-01 04:19:58

标签: python syntax

在Python 3.8中,引入了Walrus运算符,允许将赋值作为一个表达式。

这意味着我们可以替换这2条语句

a = 2
print(a)

使用

print(a := 2)

但是,Python还为运算符提供了“就地”分配,其中a = a * 3等效于a *= 3

是否可以结合Walrus分配使用“就地”运算符分配?

对于以下代码

a *= 3
print(a)

要用Walrus作业重新创建它,看来您必须这样做

print(a := a * 3)

这两种尝试都会引发SyntaxError

print(a :*= 3)
print(a *:= 3)

2 个答案:

答案 0 :(得分:0)

海象运算符不能与就地运算符一起使用。

说明:

海象运算符为 new 变量分配值并返回其值。

就地运算符是将运算符应用于现有变量并更新变量的快捷方式。 就地操作符对于 new 变量没有意义。如果将它们应用于尚未分配的变量,则会引发错误。

因此,就地和海象相结合没有用例。

编辑:更实际的解释:

.flexbox { display: flex; width: 100vw; justify-content: center; } .flexbox div { border: 1px #ccc solid; border-radius: 10px; width: 100px; height: 250px; padding: 10px; margin: 2px 10px; transition: all 1s linear 0s; } .flexgrow0 { flex-grow: 1; } .flexgrow4 { flex-grow: 4; background-color:tomato; }的含义是什么? 如果<div class="flexbox"> <div class="box flexgrow0"> <h3>Box 1</h3> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore</p> </div> <div class="box flexgrow0"> <h3>Box 2</h3> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore</p> </div> <div class="box flexgrow0"> <h3>Box 3</h3> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore</p> </div> </div>不存在,将a:+=1添加到什么值? a的最终值是多少?

以供参考:

1

答案 1 :(得分:-2)

您需要先定义a

print((a := 2)*3)

6