【发布时间】:2018-07-05 07:41:03
【问题描述】:
我读到in Twitter:
#Python 新闻:Guido 接受了 PEP 572。Python 现在有赋值表达式。
if (match := (pattern.search) pattern.search(data)) is not None: print((match.group) mo.group(1)) filtered_data = [y for x in data if (y := f(x)) is not None](第二行代码中的更正)
如前所述,PEP 572 -- Assignment Expressions 将其描述为存在于Python 3.8:
这是一个提议,用于创建一种使用符号
NAME := expr分配给表达式中的变量的方法。
我浏览了描述和示例,我发现这是一种避免重复调用或赋值的便捷方法,所以不要:
match1 = pattern1.match(data)
match2 = pattern2.match(data)
if match1:
return match1.group(1)
elif match2:
return match2.group(2)
或更高效的:
match1 = pattern1.match(data)
if match1:
return match1.group(1)
else:
match2 = pattern2.match(data)
if match2:
return match2.group(2)
现在可以说:
if match1 := pattern1.match(data):
return match1.group(1)
elif match2 := pattern2.match(data):
return match2.group(2)
同样,现在可以说:
if any(len(longline := line) >= 100 for line in lines):
print("Extremely long line:", longline)
但是,我不明白 PEP 中给出的这个例子是无效的:
y0 = y1 := f(x) # INVALID
y0 = (y1 := f(x)) 正确吗?怎么用?
对于那些想知道它在哪里可用的人的脚注:我已经安装了Python 3.7,但它在那里不起作用,因为 PEP 当前显示为“状态:草稿”。但是,PEP 谈到了概念证明/参考实现 (https://github.com/Rosuav/cpython/tree/assignment-expressions),因此使用包含它的 Python 3.8 alpha 0 版本是一个问题。
【问题讨论】:
-
这是in the PEP。
-
@user2357112 是的,谢谢,这是我从那里得到的。这就是为什么我问怎么做
标签: python pep python-3.8 python-assignment-expression