这篇文章主要介绍了介绍Python中的__future__模块,__future__模块使得在Python2.x的版本下能够兼容更多的Python3.x的特性,需要的朋友可以参考下

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.1Compatible 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__模块相关推荐

  1. python 中的__future__模块

    今天用python发现有代码impot __future__模块,这个模块的意思其实是在python老的版本中引用新的特性.

  2. 关于python 中的__future__模块

    Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 具体说来就是,某个版本中出现了某个 ...

  3. python中的__future__模块

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

  4. python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  5. python使用教程cmd啥意思-Python 中的cmd模块学习

    Python中的cmd模块类型提供了一个创建命令行解析器的框架.简单的来说,可以继承Cmd来创建命令行界面,然后对所有想处理的命令command执行do_command方法.默认情况下,它使用read ...

  6. Python中re(正则表达式)模块函数学习

    2019独角兽企业重金招聘Python工程师标准>>> Python正则表达式指南 今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的 ...

  7. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  8. Python中的random模块

    Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下: random.random() 用于生成一个0到1的随机浮点数.如: import random r ...

  9. python中的log模块笔记

    日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging四大组件记录日志 配置logging的几种方式 向日志输出中添 ...

最新文章

  1. activeMQ 本地测试
  2. 【 全干货 】5 分钟带你看懂 Docker !
  3. PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)
  4. the more wites of color
  5. 平板电脑桌面添加计算机快捷键,驰为Vi10教你Windows 10中的这些实用快捷键
  6. 图片压缩工具optipng/jpegoptim安装
  7. Shiro过滤器源码
  8. windows资源管理器已停止工作后,使用命令提示窗口拷贝文件和运行exe程序
  9. CSS3 Transitions, Transforms和Animation的使用
  10. oracle rac redo log,RAC共享online redo log和archived log的官方说明
  11. HTML+Javascript制作拼图小游戏详解(一)
  12. Python os模块 -Python系统编程中的操作模块
  13. 的pro文件添加opencv配置_VS2013+OpenCV3.1.0配置方法
  14. 金融评分卡项目—4.GBDT模型在流失预警模型中的应用
  15. ASP.NET 学习日志
  16. python代码模板
  17. PHP连接MySQL数据库的三种方式
  18. XBuilder:Ext表单设计的完美实现
  19. 数据处理之缺失值处理
  20. 点击按钮显示和隐藏图片

热门文章

  1. 职业高中计算机原理,132-浅议职业高中计算机组成原理教法初探
  2. 无法安装mysql server 2008_Windows Server2008安装mysql5.6出现程序无法正常启动(0xc000007b)...
  3. 查题接口 源码 php 爬题,大学网课查题公众号查题教程_网课查题题库接口API-在线搜答案...
  4. 决战 平安京服务器维护,《决战!平安京》2018年9月7日维护公告
  5. controll层跳转页面_SpringMVC controller控制页面跳转 | 学步园
  6. Java中的中介器设计模式
  7. c++ 私有内部类_C++类成员的访问权限以及类的封装
  8. mysql druid 多数据源_SpringBoot使用阿里数据库连接池Druid以及多数据源配置
  9. java word openoffice_java 使用openoffice 转换文档,成.pdf,实现在线预览效果
  10. 打开 谷歌浏览器exe_谷歌浏览器下载安装和插件安装步骤