首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python3.7中使用walrus操作符

在Python3.7中使用walrus操作符
EN

Stack Overflow用户
提问于 2020-03-10 21:57:53
回答 2查看 5.1K关注 0票数 19

为什么未来的进口仅限于某些功能?在Python3.7中没有办法得到walrus操作符吗?我以为这能行,但它不管用:

代码语言:javascript
复制
from __future__ import walrus

它不起作用,因为walrus不在受支持的特性列表中:

代码语言:javascript
复制
__future__.all_feature_names
['nested_scopes', 'generators', 'division', 'absolute_import', 'with_statement', 'print_function', 'unicode_literals', 'barry_as_FLUFL', 'generator_stop', 'annotations']

除了使用python3.8之外,还有其他替代方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-10 22:08:37

如果您使用的Python版本不包含一个特性的实现,那么您就不能使用该特性;编写from __future__ import ...不能导致在您安装的Python版本中实现该特性。

__future__导入的目的是允许一个新特性的“选择”期,这可能会破坏现有的程序。例如,当/运算符对整数的行为被更改为3/21.5而不是1 (即楼层划分)时,如果只是在一夜之间更改它,就会破坏很多代码。因此,这两种行为都是在接下来的几个Python版本中实现的,如果您使用的是较新的版本之一,那么您可以使用from __future__ import division选择新的行为。但是,您之所以能够这样做,是因为您使用的Python版本确实实现了新的行为。

walrus操作符是在Python3.8中引入的,所以如果您使用的是3.8之前的版本,那么它不包含该操作符的实现,因此不能使用它。没有必要使用__future__来使walrus运算符“选择”,因为引入一个新的具有新语法的运算符不可能破坏任何现有的代码。

票数 32
EN

Stack Overflow用户

发布于 2020-03-10 22:08:20

您可以通过引入阅读PEP来了解__future__。主要是,

有时,Python会对核心语言结构的宣传语义进行不兼容的更改,或者以某种方式改变它们的意外(依赖于实现的)行为。虽然这从来都不是随心所欲的,而且总是为了长期改善语言而做的,但从短期来看,这是有争议的和干扰性的。

walrus操作符不是一个向后不兼容的更改:它对已经“工作”的代码的含义没有任何改变。:=以前只是一个语法错误。

因此,将其添加到__future__甚至从未被考虑过。您可能会反对"with“语句同样是全新的,但情况并非如此:"with”不是一个保留词,它的引入可能会破坏使用"with“作为标识符的工作代码。

所以,对不起,使用3.8,否则你就倒霉了。别向信使开枪;-)

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60626517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档