【问题标题】:Can you use in-place operators with the Python 3.8 "Walrus" operator?您可以将就地运算符与 Python 3.8 “海象”运算符一起使用吗?
【发布时间】:2020-06-13 18:02:28
【问题描述】:

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

这意味着我们可以替换这两个语句

a = 2
print(a)

print(a := 2)

不过,Python 也有“就地”赋值运算符,例如,a = a * 3 等价于 a *= 3

有没有办法将“就地”运算符赋值与海象赋值结合使用?

如下代码

a *= 3
print(a)

要使用 Walrus 任务重新创建它,您似乎必须这样做

print(a := a * 3)

这两种尝试都会引发SyntaxError

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

【问题讨论】:

  • 简写赋值表达式还不是一件事。
  • 我猜你的实验用“否”回答了你的问题。
  • @KlausD。似乎是这样。我得出结论,在最新版本的 Python 中没有明显的方法可以做到这一点,但我可能错过了一些东西。或者,这个功能可能计划在未来的版本中发布。

标签: python syntax


【解决方案1】:

你需要先定义a

print((a := 2)*3)

6

【讨论】:

  • 这看起来不像回答了所提出的问题。
  • 这会打印 6,但 a 仍然是 2。
【解决方案2】:

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

解释:

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

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

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

编辑:更实用的解释:

a:+=1 的含义是什么? 如果a 不存在,1 将被添加到什么值? a 的最终值是多少?

供参考:

a:=8 #means : assign 8 to a and "return" a 
a+=1 #means : a = a +1 and it raises an exception if a doesn't exists

【讨论】:

  • 在 python 中,分配一个新变量和重新分配一个现有变量,都使用相同的语法,因为它们是相同的操作。海象运算符在这两种情况下都是有效的替代品。
  • 你没有抓住重点。 1/如果你分配一个新变量,你不需要就地修改它的值。 2/如果你想就地修改一个变量,你不需要新的赋值。 3/ 由于 1/ 和 2/ ,您永远不需要同时就地和海象。
  • 尝试找到一个同时需要就地和海象的示例。
  • 海象运算符的功能可以说从来没有真正需要,即使在新赋值的情况下也是如此,因此它在 Python 中的添加较晚,并且在许多通用语言中都没有。也许我的问题的目的并不清楚:我只是想问这种组合在语言中是否可能,因为我对这种新的语言特性以及它如何与现有的赋值语法交互感到好奇
  • 海象确实有用,但这是另一个讨论。我相信我正确理解了您关于结合海象和就地运算符的问题;我的回答是没有组合它们的用例,而且它不能在 python 中完成。如果您认为我的回答不清楚或没有说服力,我很乐意根据您的反馈改进它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 2019-05-26
  • 2018-04-17
  • 1970-01-01
  • 2020-04-22
相关资源
最近更新 更多