python : 使用 __future__ 的作用
在python中使用 from __future__ import xxx 可以达到在python2.7中使用python3.x 的一些改变
以下转载自:廖雪峰的官方网站
使用__future__
Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动。有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了。
从Python 2.7到Python 3.x就有不兼容的一些改动,比如2.x里的字符串用'xxx'
表示str,Unicode字符串用u'xxx'
表示unicode,而在3.x中,所有字符串都被视为unicode,因此,写u'xxx'
和'xxx'
是完全一致的,而在2.x中以'xxx'
表示的str就必须写成b'xxx'
,以此表示“二进制字符串”。
要直接把代码升级到3.x是比较冒进的,因为有大量的改动需要测试。相反,可以在2.7版本中先在一部分代码中测试一些3.x的特性,如果没有问题,再移植到3.x不迟。
Python提供了__future__
模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。举例说明如下:
为了适应Python 3.x的新的字符串的表示方法,在2.7版本的代码中,可以通过unicode_literals
来使用Python 3.x的新的语法:
# still running on Python 2.7from __future__ import unicode_literalsprint '\'xxx\' is unicode?', isinstance('xxx', unicode)
print 'u\'xxx\' is unicode?', isinstance(u'xxx', unicode)
print '\'xxx\' is str?', isinstance('xxx', str)
print 'b\'xxx\' is str?', isinstance(b'xxx', str)
注意到上面的代码仍然在Python 2.7下运行,但结果显示去掉前缀u
的'a string'
仍是一个unicode,而加上前缀b
的b'a string'
才变成了str:
$ python task.py
'xxx' is unicode? True
u'xxx' is unicode? True
'xxx' is str? False
b'xxx' is str? True
类似的情况还有除法运算。在Python 2.x中,对于除法有两种情况,如果是整数相除,结果仍是整数,余数会被扔掉,这种除法叫“地板除”:
>>> 10 / 3
3
要做精确除法,必须把其中一个数变成浮点数:
>>> 10.0 / 3
3.3333333333333335
而在Python 3.x中,所有的除法都是精确除法,地板除用//
表示:
$ python3
Python 3.3.2 (default, Jan 22 2014, 09:54:40)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3
如果你想在Python 2.7的代码中直接使用Python 3.x的除法,可以通过__future__
模块的division
实现:
from __future__ import divisionprint '10 / 3 =', 10 / 3
print '10.0 / 3 =', 10.0 / 3
print '10 // 3 =', 10 // 3
结果如下:
10 / 3 = 3.33333333333
10.0 / 3 = 3.33333333333
10 // 3 = 3
小结
由于Python是由社区推动的开源并且免费的开发语言,不受商业公司控制,因此,Python的改进往往比较激进,不兼容的情况时有发生。Python为了确保你能顺利过渡到新版本,特别提供了__future__
模块,让你在旧的版本中试验新版本的一些特性。
python : 使用 __future__ 的作用相关推荐
- python装饰器作用-Python 装饰器的作用
python装饰器的作用,我是这么理解的, 比如本来已经有几个写好的函数,这几个函数的返回值都是list,现在我想要它们都返回str型的值,一个个改函数太累,也容易出错,装饰器能解决这样的问题,它能对 ...
- python assert 断言的作用
python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助.本文主要是 ...
- python from __future__ import division
python from __future__ import division 之前一直很困惑,为什么这个模块叫future呢,难道有什么特殊功能能够让人们想到未来吗,最近才恍然大悟. pytho ...
- python super()方法的作用_详解python的super()的作用和原理
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.uz0免费资源网 今天我们介绍的主角是s ...
- Python之pyc文件作用及生成方法
Python之pyc文件作用及生成方法_宗而研之的博客-CSDN博客 1 什么是pyc 首先了解下python的运行机制及特性:当我们运行python文件程序的时候,Python解释器将源码转换为字节 ...
- python 中/ 与 //的作用、用法
python 中/ 与 //的作用.用法 原创蓝莓·山药 最后发布于2019-06-21 09:27:54 阅读数 3591 收藏 展开 python语法中, / 是除法,例如:2/3 = 0.66 ...
- Python的pip3的作用与用法
Python的pip3的作用与用法 pip3作用:自动下载安装Python的库文件(Python的库文件非常丰富,使用pip3命令下载安装这些库文件十分方便). Windows下pip3 命令使用方法 ...
- python匿名函数的作用_Python匿名函数 Lambda表达式作用
在Python这门优美的编程语言中,支持一种有趣的语法格式(表达式),可以让我们在单行内创建一个最小的函数-python lambda匿名函数. 据说是借鉴了Lisp语言中lambda表达式,它可以使 ...
- python布尔值的作用_Python基础教程详解布尔变量的作用
布尔值也叫真值,在Python开发(http://www.maiziedu.com/course/python-px/)中所有的值都被解释为真值,标准的真值为true和false.那么布尔变量在Pyt ...
最新文章
- 强化学习(Reinforcement Learning)是什么?强化学习(Reinforcement Learning)和常规的监督学习以及无监督学习有哪些不同?
- 基于DSP/BIOS和NDK的嵌入式网络操作系统设计方案
- hdu 3879(最小割模型求解最大权闭合图)
- tableview下拉刷新
- 【Linux】一步一步学Linux——apt-sortpkgs命令(280)
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!...
- python在统计专业的应用_Python统计学一数据的概括性度量详解
- Linux内核分析 - 网络[十七]:NetFilter之连接跟踪
- windows下SBT的安装与使用
- 2016最新php支付平台源码,Thinkphp各大支付平台在线支付集成源码
- 算法训练 Bus Tour
- 电芯知识汇总(转载)
- 冷凝器胶球自动在线清洗装置在中央空调主机冷凝器清洗方案介绍
- 深信服 AC上网 行为管理设置
- Ubuntu18.04 wifi不稳定
- 什么是用户价值分层?
- 短连接生成系统如何设计?
- 个人常用观影网址记录
- Ambire钱包白皮书
- s:iterator各种遍历用法
热门文章
- atmega8a如何烧写程序_快捷又安全!如何利用芯片内部Bootloader烧写程序?
- python 多线程读写文件_python多线程写入文件问题
- 8b 10b c语言编码,2012年计算机等级二级C语言章节习题及答案(10)
- matlab提示用户输入参数,调用函数显示输入参数不足
- java+基于dom4j工具类_基于dom4j的xml映射实体的工具类(java)
- jsf教程_JSF教程
- portlet_Portlet生命周期
- 编程c语言中,向上取整函数_C编程中的函数
- linux基本命令示例_Linux正常运行时间命令示例
- C语言内存泄漏问题检视方法