python基础__future__导入的介绍
Python解释器会在定义时抛出。
__future__
导入是Python中一个特殊的机制,
它允许程序员在当前版本的Python代码中启用将来版本中才会引入的某些语言特性。
这样做的目的是
为了帮助开发者平滑过渡到新版本,
或者
在新版本发布之前
就能够使用这些新特性进行开发和测试。
具体来说,__future__
导入通过从__future__
模块中导入特定的功能或特性
来实现。
__future__
导入的特点和用法
模块特性:__future__
是一个真正的Python模块,
但它不包含任何可在代码中直接使用的功能或类
。
相反,它仅用于控制Python解释器如何处理导入它的模块中的代码。
不包含功能,只控制解释器
特性列表:__future__
模块包含了一系列特性(feature)
,
这些特性对应于未来Python版本中可能会引入的新语言特性。
通过从__future__
模块中导入这些特性,
开发者可以在当前版本的Python中提前使用它们。
包含的东西叫特性,feature;
语法要求:from __future__ import <feature>
语句必须出现在模块文件的最顶部,
位于任何其他语句之前(包括文档字符串)。
这是为了确保解释器在解析任何代码之前就能够识别并应用这些未来的特性。
必须在模块文件最顶部;
常见特性:
print_function
:允许在Python 2.x中使用Python 3.x的print()
函数语法。division
:改变除法运算符(/
)的行为,使其总是返回浮点数,而不是在Python 2.x中的整数除法。unicode_literals
:使字符串字面量在Python 2.x中默认为Unicode字符串。absolute_import
:在Python 2.x中启用绝对导入,这是Python 3.x的默认行为。generator_stop
:在Python 3.7及更高版本中,允许生成器在return
语句中携带值,并通过StopIteration
异常传递这个值。在旧版本中导入此特性可以模拟这一行为。
看起来更多的用途是,在python2当中使用
__future__
导入,使用python3的特性;
什么是绝对导入?
用途:
- 代码兼容性:当需要维护同时支持多个Python版本的代码库时,
__future__
导入可以帮助提高代码的兼容性。 - 逐步迁移:在将项目从旧版本的Python迁移到新版本时,可以逐步引入这些新特性,以减少迁移过程中的不兼容问题。
- 教育和示例代码:为了使示例代码或教学材料更通用,或引导学习者使用更现代的Python实践,可以使用
__future__
特性。
注意事项
- 随着Python版本的更新,一些原本需要通过
__future__
导入的特性可能会成为默认行为,因此在编写新代码时,通常不需要再显式导入这些特性。 - 在使用
__future__
导入时,需要确保了解所导入特性的具体行为和潜在影响,以避免引入意外的错误或兼容性问题。
怎么查找future导入代码
使用ctrl+shift+f快捷键,如图所示,在窗口中搜索;
from __future__ import annotations
这行代码在Python中用于改变注解(annotations)的解析方式,
特别是在Python 3.7及以上版本中。
在Python 3.7
之前,
注解(即函数参数、返回值以及变量类型后面跟的表达式,如def foo(a: int) -> float:
中的int
和float
)
在代码中被视为普通的表达式,
这些表达式会在代码定义时立即求值。
这意味着,
如果你在注解中使用了尚未定义的类或函数名,
Python解释器会在定义时抛出NameError
。
然而,从Python 3.7开始,PEP 563被引入,
它提出了一个新的特性,
允许将注解视为字符串字面量,
直到运行时。
这意味着,
即使你在注解中使用了尚未定义的类或函数名,
这些名字也不会在定义时立即被求值,
从而避免了NameError
。
但是,
这个行为并不是Python 3.7的默认行为,
需要通过在文件顶部添加from __future__ import annotations
来显式启用。
在Python 3.10及以后的版本中,
这一行为成为了默认行为,
即注解被视为字符串字面量直到运行时,
无需显式导入from __future__ import annotations
。
但是,
对于希望保持代码在多个Python版本间兼容性的开发者来说,
显式地导入这个特性仍然是一个好习惯。
更多推荐
所有评论(0)