介绍Python中的__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的新的语法:
1
2
3
4
5
6
7
8
|
# still running on Python 2.7
from __future__ import unicode_literals
print '\'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:
1
2
3
4
5
|
$ python task.py
'xxx' is unicode ? True
u 'xxx' is unicode ? True
'xxx' is str ? False
b 'xxx' is str ? True
|
类似的情况还有除法运算。在Python 2.x中,对于除法有两种情况,如果是整数相除,结果仍是整数,余数会被扔掉,这种除法叫“地板除”:
1
2
|
>>> 10 / 3
3
|
要做精确除法,必须把其中一个数变成浮点数:
1
2
|
>>> 10.0 / 3
3.3333333333333335
|
而在Python 3.x中,所有的除法都是精确除法,地板除用//表示:
1
2
3
4
5
6
7
8
|
$ 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实现:
1
2
3
4
5
|
from __future__ import division
print '10 / 3 =' , 10 / 3
print '10.0 / 3 =' , 10.0 / 3
print '10 // 3 =' , 10 / / 3
|
结果如下:
1
2
3
|
10 / 3 = 3.33333333333
10.0 / 3 = 3.33333333333
10 / / 3 = 3
|
小结
由于Python是由社区推动的开源并且免费的开发语言,不受商业公司控制,因此,Python的改进往往比较激进,不兼容的情况时有发生。Python为了确保你能顺利过渡到新版本,特别提供了__future__模块,让你在旧的版本中试验新版本的一些特性。
介绍Python中的__future__模块相关推荐
- python 中的__future__模块
今天用python发现有代码impot __future__模块,这个模块的意思其实是在python老的版本中引用新的特性.
- 关于python 中的__future__模块
Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 具体说来就是,某个版本中出现了某个 ...
- python中的__future__模块
本文章转载自:https://www.cnblogs.com/ksedz/p/3190208.html 作用 future__模块提供某些将要引入的特性 2.7.5的__future 基本上是pyth ...
- python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...
python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...
- python使用教程cmd啥意思-Python 中的cmd模块学习
Python中的cmd模块类型提供了一个创建命令行解析器的框架.简单的来说,可以继承Cmd来创建命令行界面,然后对所有想处理的命令command执行do_command方法.默认情况下,它使用read ...
- Python中re(正则表达式)模块函数学习
2019独角兽企业重金招聘Python工程师标准>>> Python正则表达式指南 今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的 ...
- linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...
本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...
- Python中的random模块
Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下: random.random() 用于生成一个0到1的随机浮点数.如: import random r ...
- python中的log模块笔记
日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四大组件记录日志 配置logging的几种方式 向日志输出中添 ...
最新文章
- activeMQ 本地测试
- 【 全干货 】5 分钟带你看懂 Docker !
- PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)
- the more wites of color
- 平板电脑桌面添加计算机快捷键,驰为Vi10教你Windows 10中的这些实用快捷键
- 图片压缩工具optipng/jpegoptim安装
- Shiro过滤器源码
- windows资源管理器已停止工作后,使用命令提示窗口拷贝文件和运行exe程序
- CSS3 Transitions, Transforms和Animation的使用
- oracle rac redo log,RAC共享online redo log和archived log的官方说明
- HTML+Javascript制作拼图小游戏详解(一)
- Python os模块 -Python系统编程中的操作模块
- 的pro文件添加opencv配置_VS2013+OpenCV3.1.0配置方法
- 金融评分卡项目—4.GBDT模型在流失预警模型中的应用
- ASP.NET 学习日志
- python代码模板
- PHP连接MySQL数据库的三种方式
- XBuilder:Ext表单设计的完美实现
- 数据处理之缺失值处理
- 点击按钮显示和隐藏图片
热门文章
- 职业高中计算机原理,132-浅议职业高中计算机组成原理教法初探
- 无法安装mysql server 2008_Windows Server2008安装mysql5.6出现程序无法正常启动(0xc000007b)...
- 查题接口 源码 php 爬题,大学网课查题公众号查题教程_网课查题题库接口API-在线搜答案...
- 决战 平安京服务器维护,《决战!平安京》2018年9月7日维护公告
- controll层跳转页面_SpringMVC controller控制页面跳转 | 学步园
- Java中的中介器设计模式
- c++ 私有内部类_C++类成员的访问权限以及类的封装
- mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置
- java word openoffice_java 使用openoffice 转换文档,成.pdf,实现在线预览效果
- 打开 谷歌浏览器exe_谷歌浏览器下载安装和插件安装步骤