我已经读过PEP 572有关赋值表达式的信息,发现该代码是可以使用它的清晰示例:
while line := fp.readline():
do_stuff(line)
但是我很困惑,从我读到的内容来看,它应该像正常分配一样工作,但是返回值。但这似乎不起作用:
>>> w:=1
File "<stdin>", line 1
w:=1
^
SyntaxError: invalid syntax
现在,在修改它之后,我实现了以下工作:
>>> (w:=1)
1
但是感觉太不可思议了。它是唯一需要括号的运算符:
>>> w = 1
>>> w + w
2
>>> w == w
True
>>> w is w
True
>>> w < w
False
解析器是否有理由将其与Python中的任何其他东西区别对待...?我觉得我想念什么。这不只是一个运算符。
在REPL中使用:=
分配变量将非常有用,因为将显示该值。
(更新: 我不鼓励就这个敏感的话题进行有目的的讨论。请避免发布有用的评论或答案。)
答案 0 :(得分:5)
正如GreenCloakGuy所述,它是为了避免混淆,正如here所说,我认为这行总结了所有内容:
=和:=都没有语法位置。
由于太混乱,它还会使诸如此类的东西无效:
# Generate "num_points" random points in "dimension" that have uniform
# probability over the unit ball scaled by "radius" (length of points
# are in range [0, "radius"]).
def random_ball(num_points, dimension, radius=1):
from numpy import random, linalg
# First generate random directions by normalizing the length of a
# vector of random-normal values (these distribute evenly on ball).
random_directions = random.normal(size=(dimension,num_points))
random_directions /= linalg.norm(random_directions, axis=0)
# Second generate a random radius with probability proportional to
# the surface area of a ball with a given radius.
random_radii = random.random(num_points) ** (1/dimension)
# Return the list of random (direction & length) points.
return radius * (random_directions * random_radii).T