为什么未来的进口仅限于某些功能?在Python3.7中没有办法得到walrus操作符吗?我以为这能行,但它不管用:
from __future__ import walrus它不起作用,因为walrus不在受支持的特性列表中:
__future__.all_feature_names
['nested_scopes', 'generators', 'division', 'absolute_import', 'with_statement', 'print_function', 'unicode_literals', 'barry_as_FLUFL', 'generator_stop', 'annotations']除了使用python3.8之外,还有其他替代方法吗?
发布于 2020-03-10 22:08:37
如果您使用的Python版本不包含一个特性的实现,那么您就不能使用该特性;编写from __future__ import ...不能导致在您安装的Python版本中实现该特性。
__future__导入的目的是允许一个新特性的“选择”期,这可能会破坏现有的程序。例如,当/运算符对整数的行为被更改为3/2是1.5而不是1 (即楼层划分)时,如果只是在一夜之间更改它,就会破坏很多代码。因此,这两种行为都是在接下来的几个Python版本中实现的,如果您使用的是较新的版本之一,那么您可以使用from __future__ import division选择新的行为。但是,您之所以能够这样做,是因为您使用的Python版本确实实现了新的行为。
walrus操作符是在Python3.8中引入的,所以如果您使用的是3.8之前的版本,那么它不包含该操作符的实现,因此不能使用它。没有必要使用__future__来使walrus运算符“选择”,因为引入一个新的具有新语法的运算符不可能破坏任何现有的代码。
发布于 2020-03-10 22:08:20
您可以通过引入阅读PEP来了解__future__。主要是,
有时,Python会对核心语言结构的宣传语义进行不兼容的更改,或者以某种方式改变它们的意外(依赖于实现的)行为。虽然这从来都不是随心所欲的,而且总是为了长期改善语言而做的,但从短期来看,这是有争议的和干扰性的。
walrus操作符不是一个向后不兼容的更改:它对已经“工作”的代码的含义没有任何改变。:=以前只是一个语法错误。
因此,将其添加到__future__甚至从未被考虑过。您可能会反对"with“语句同样是全新的,但情况并非如此:"with”不是一个保留词,它的引入可能会破坏使用"with“作为标识符的工作代码。
所以,对不起,使用3.8,否则你就倒霉了。别向信使开枪;-)
https://stackoverflow.com/questions/60626517
复制相似问题