__future__ Python中的模块
__future__ 模块是Python中的内置模块,用于继承将在新Python版本中可用的新功能。
此模块包含Python中先前版本中不存在的所有最新功能。我们可以通过导入 __future__ 模块来使用它。它的版本是Python 2.1 版。 __future__ 模块的基本思想是帮助迁移到使用Python 3.X 功能。
注意: future 语句必须在文件顶部,否则Python解释器会引发 SyntaxError
此模块中的以下功能:
Features | Optional in | Mandatory in |
---|---|---|
nested_scopes | 2.1 | 2.2 |
generators | 2.2 | 2.3 |
division | 2.2 | 3.0 |
absolute_import | 2.5 | 3.0 |
with_statement | 2.5 | 2.6 |
print_function | 2.6 | 3.0 |
unicode_literals | 2.6 | 3.0 |
generator_stop | 3.5 | 3.7 |
annotations | 3.7 | 3.11 |
未来模块的基本功能:
Python future 模块有七个特性。
Python
import __future__
print(__future__.all_feature_names)
Python
# Code in Python 2
from __future__ import print_function
print("Hello world")
Python
# In 2.7 python compiler
print("Hello world", end=" ")
Python
# In 2.7 python compiler
from __future__ import print_function
print("Hello world", end=";")
Python3
# In 2.7 python compiler
print('Welcome ', ' Geeksforgeeks', sep = ' To ')
Python
# In 2.7 python compiler
from __future__ import print_function
print('Welcome ', ' Geeksforgeeks', sep=' To ')
Python
# In 2.7 python compiler
print 7 / 5
print -7 / 5
Python
# In below python 2.x code, division works
# same as Python 3.x because we use __future__
from __future__ import division
print 7 / 5
print -7 / 5
Python
# code in Python2
print(type("Geeks"))
Python
# code in Python2
from __future__ import unicode_literals
print(type("Geeks"))
Python
# encoding: utf-8
name = 'helló wörld from example'
print name.encode('utf8')
Python
# encoding: utf-8
from __future__ import unicode_literals
name = 'helló wörld from example'
print name.encode('utf8')
输出:
['nested_scopes',
'generators',
'division',
'absolute_import',
'with_statement',
'print_function',
'unicode_literals']
__future__ 模块与 print_function
示例 1:
Python2 的打印语句不同于 Python3 的打印函数。我们在 Python2 中使用Python打印语句作为:
print "Hello world"
但是我们可以使用未来的模块在 Python2函数中使用 Python3 打印函数。
Python
# Code in Python 2
from __future__ import print_function
print("Hello world")
输出:
Hello world
示例 2:
在这里,我们将使用Python 3 中的 end 属性打印Python 2.X 中的消息,并且“end”在换行符中附加字符串。它会引发错误,因为该函数与 2.x 不兼容。
Python
# In 2.7 python compiler
print("Hello world", end=" ")
输出:
File "main.py", line 1
print("Hello world", end=" ")
^
SyntaxError: invalid syntax
因此,通过 __future__ 打印函数,我们可以在代码中导入这些功能以使用最新的打印函数。
Python
# In 2.7 python compiler
from __future__ import print_function
print("Hello world", end=";")
输出:
Hello world;
示例 3:
sep 也属于Python 3.x,但在这里我们将通过使用这个模块来使用这些属性。让我们在不使用未来模块的情况下检查这些属性。
蟒蛇3
# In 2.7 python compiler
print('Welcome ', ' Geeksforgeeks', sep = ' To ')
输出:
File "main.py", line 1
print('Welcome ', ' Geeksforgeeks', sep=' To ')
^
SyntaxError: invalid syntax
然后让我们使用 __future__ 打印函数来使用 sep 属性。
Python
# In 2.7 python compiler
from __future__ import print_function
print('Welcome ', ' Geeksforgeeks', sep=' To ')
输出:
Welcome To Geeksforgeeks
__future__ 具有除法函数的模块
这里我们将使用 Python2.x 和 Python3.x 中的除法函数。
让我们看看 Python2.x 中的例子。
Python
# In 2.7 python compiler
print 7 / 5
print -7 / 5
输出:
1.4
-1.4
让我们用未来的模块看看这个,它会给你准确的结果。
Python
# In below python 2.x code, division works
# same as Python 3.x because we use __future__
from __future__ import division
print 7 / 5
print -7 / 5
输出:
1.4
-1.4
带有 unicode_literals函数的 __future__ 模块
在 Python2.x 中我们不能使用 Unicode,但未来的模块允许我们使用 Unicode。
示例 1:
在 Python2 中,字符串被视为字节字符串,但在更高版本中,所有字符串都被视为 Unicode字符串。
Python
# code in Python2
print(type("Geeks"))
输出:
让我们在 Python2 中使用 future 模块。
Python
# code in Python2
from __future__ import unicode_literals
print(type("Geeks"))
输出:
示例 2:
让我们看看没有 future 模块的示例,它会引发错误,因为我们正在构建一个包含 UTF-8 编码字节的字节字符串
Python
# encoding: utf-8
name = 'helló wörld from example'
print name.encode('utf8')
输出:
Traceback (most recent call last):
File "main.py", line 3, in
print name.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)
它可以在 Python2X 中使用未来的模块完成。
Python
# encoding: utf-8
from __future__ import unicode_literals
name = 'helló wörld from example'
print name.encode('utf8')
输出:
helló wörld from example