或许在看代码时会注意到 __future__
模块的使用
如
1from __future__ import print_function
那么,__future__
模块是做什么的?通俗地理解,就是在 python 旧版本中引入新版本的部分语法特征。在导入 __future__
模块中的某一特征之后,它就可以在后续代码中使用了。
因为 python 是不保证向旧版本兼容的,所以旧版本的代码很可能在新版本会用不了。在准备将旧版本代码移植到新版本时,就可以先在旧版本代码中导入 __future__
模块进行测试。
__future__
模块在python 2.1 及其之后的版本中可用,其中,__future__
模块引入了下面这些特性
特性 | 强制加入版本 | 效果 |
---|---|---|
nested_scopes | 2.2 | PEP 227: Statically Nested Scopes |
generators | 2.3 | PEP 255: Simple Generators |
division | 3.0 | PEP 238: Changing the Division Operator |
absolute_import | 3.0 | PEP 328: Imports: Multi-Line and Absolute/Relative |
with_statement | 2.6 | PEP 343: The “with” Statement |
print_function | 3.0 | PEP 3105: Make print a function |
unicode_literals | 3.0 | PEP 3112: Bytes literals in Python 3000 |
generator_stop | 3.7 | PEP 479: StopIteration handling inside generators |
annotations | 4.0 | PEP 563: Postponed evaluation of annotations |
下面对其中四个举例说明
- 精确除法
1Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)
2[GCC 7.3.0] on linux2
3Type "help", "copyright", "credits" or "license" for more information.
41/3
50
610/3
73
8from __future__ import division # 引入新特征
91/3
100.3333333333333333
1110/3
123.3333333333333335
- with 语句
1file_handle = open('file_path', 'mode')
2file_handle.read()
3file_handle.close()
4
5# from __future__ import with_statement # 引入新特征之后
6with open('file_path', 'mode') as file_handle:
7 file_handle.read()
8
9# 使用 with 语句,一些文件和进程的善后工作就可以不用那么操心,with 的用法也不止这些
10
- print 语句
1Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)
2[GCC 7.3.0] on linux2
3Type "help", "copyright", "credits" or "license" for more information.
4print 'hello' # 打印输出不需要括号
5hello
6import sys
7print >> sys.stderr, 'output to the standard error stream' # 输出到标准错误流
8output to the standard error stream
9# 引入新特征之后
10from __future__ import print_function
11print ('hello') # 需要括号
12hello
13print ('output to the standard error stream', file=sys.stderr) #输出到标准错误流
14output to the standard error stream
- 字符串
1Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)
2[GCC 7.3.0] on linux2
3Type "help", "copyright", "credits" or "license" for more information.
4type('hello') # 字符串为 str 类型
5<type 'str'>
6type(b'hello')
7<type 'str'>
8type(u'hello')
9<type 'unicode'>
10# 引入新特征之后
11from __future__ import unicode_literals
12type('hello') # 字符串为 unicode 类型
13<type 'unicode'>
14type(b'hello')
15<type 'str'>
16type(u'hello')
17<type 'unicode'>
官方文档:https://docs.python.org/zh-cn/3/library/__future__.html