python中的__future__模块

本文深入解析Python的__future__模块,介绍其提供的特性,如新的除法行为、print函数、unicode_literals等,以及如何通过这些特性增强代码的Python 2与Python 3兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章转载自:https://www.cnblogs.com/ksedz/p/3190208.html
作用
future__模块提供某些将要引入的特性
2.7.5的__future

基本上是python3中的特性
有以下内容

In [1]: import __future__

In [2]: __future__.
__future__.CO_FUTURE_ABSOLUTE_IMPORT  __future__.all_feature_names
__future__.CO_FUTURE_DIVISION         __future__.division
__future__.CO_FUTURE_PRINT_FUNCTION   __future__.generators
__future__.CO_FUTURE_UNICODE_LITERALS __future__.nested_scopes
__future__.CO_FUTURE_WITH_STATEMENT   __future__.print_function
__future__.CO_GENERATOR_ALLOWED       __future__.unicode_literals
__future__.CO_NESTED                  __future__.with_statement
__future__.absolute_import

In [2]: __future__.

可导入的功能有哪些?

In [3]: import __future__

In [4]: __future__.all_feature_names
Out[4]:
['nested_scopes',
 'generators',
 'division',
 'absolute_import',
 'with_statement',
 'print_function',
 'unicode_literals']

对应功能如下:
[1] division 新的除法特性,本来的除号/对于分子分母是整数的情况会取整,但新特性中在此情况下的除法不会取整,取整的使用//。如下可见,只有分子分母都是整数时结果不同。

In [1]: 3 / 5
Out[1]: 0

In [2]: 3 // 5
Out[2]: 0

In [3]: 3.0 / 5.0
Out[3]: 0.6

In [4]: 3.0 // 5.0
Out[4]: 0.0

In [5]: from __future__ import division

In [6]: 3 / 5
Out[6]: 0.6

In [7]: 3 // 5
Out[7]: 0

In [8]: 3.0 / 5.0
Out[8]: 0.6

In [9]: 3.0 // 5.0
Out[9]: 0.0

[2] print_function 新的print是一个函数,如果导入此特性,之前的print语句就不能用了。在python2.x中print函数无需括号,但在python3.x中需要括号;在代码中导入print_function后,再写print必须加括号。

In [1]: print 'test __future__'
test __future__

In [2]: from __future__ import print_function

In [3]: print('test')
test

In [4]: print 'test'
  File "<ipython-input-4-ed4b06bfff9f>", line 1
    print 'test'
               ^
SyntaxError: invalid syntax

[3] unicode_literals 这个是对字符串使用unicode字符。

In [1]: print '目录'
鐩綍

In [2]: from __future__ import unicode_literals

In [3]: print '目录'
目录

[4] absolute_import 这个没有搞懂,如果我当前目录有一个sys.py,我用的时候总是会调用系统的sys。如果当前目录和sys.path的路径中都有一个foo,则都会调用当前目录下的foo。另外,我运行的方式都是 python filename.py的方式,而如果使用python -c "import filename"则又是另一种答案。这个问题还没有解决,搜到的最详细的讨论见http://bytes.com/topic/python/answers/596703-future-import-absolute_import
[5] nested_scopes 这个是修改嵌套函数或lambda函数中变量的搜索顺序,从当前函数命名空间->模块命名空间的顺序更改为了当前函数命名空间->父函数命名空间->模块命名空间,python2.7.5中默认使用
[6] generators 生成器,对应yield的语法,python2.7.5中默认使用
[7] with_statement 是使用with关键字,python2.7.5是默认使用
运用
首先是可以做个性化的用法,比如你喜欢用print()而不是print
更重要的是基本用以下几句就可以让python2和python3有良好的兼容性了

from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值