资讯专栏INFORMATION COLUMN

python进阶笔记【2】 --- 一个奇怪的 __future__ 库

Achilles / 948人阅读

摘要:正文总所周知,和根本就是两个东西,每次因为这个兼容性的问题都会把自己搞疯。提供了模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。传送门不多,才个。

写在前面

我是在学习cs231n的assignment3的课程,发现里面的代码大量频繁出现了这个库,那我就很奇怪了,为什么有个future这个奇怪名字的库会出现呢?到底这个库又有什么用?下面就让我为你揭开。

正文

总所周知,python3.x和python2.x根本就是两个东西,每次因为这个兼容性的问题都会把自己搞疯。

下面很多内容参考廖雪峰博客

从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",以此表示“二进制字符串”。

于是呢。

Python提供了__future__模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。举例说明如下:

为了适应Python 3.x的新的字符串的表示方法,在2.7版本的代码中,可以通过unicode_literals来使用Python 3.x的新的语法:

# 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)


输出结果:

"xxx" is unicode? True
u"xxx" is unicode? True
"xxx" is str? False
b"xxx" is str? True

类似的情况还有除法运算。在Python 2.x中,对于除法有两种情况,如果是整数相除,结果仍是整数,余数会被扔掉,这种除法叫“floor deviation”:

>>> 10 / 3
3

要做精确除法,必须把其中一个数变成浮点数:

>>> 10.0 / 3
3.3333333333333335

而在Python 3.x中,所有的除法都是精确除法,floor deviation 用//表示:

$ 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 division

print "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

所以总结来说,__future__就好像这个名字一样,未来,就是为了让你在python2.x的情况下使用python3.x的东西,具体还有很多的详细使用方式就需要好好看看api了。

api传送门
feature不多,才7个。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40787.html

相关文章

  • Python

    摘要:最近看前端都展开了几场而我大知乎最热语言还没有相关。有关书籍的介绍,大部分截取自是官方介绍。但从开始,标准库为我们提供了模块,它提供了和两个类,实现了对和的进一步抽象,对编写线程池进程池提供了直接的支持。 《流畅的python》阅读笔记 《流畅的python》是一本适合python进阶的书, 里面介绍的基本都是高级的python用法. 对于初学python的人来说, 基础大概也就够用了...

    dailybird 评论0 收藏0
  • Python数据分析实用程序

    摘要:机器学习由于数据量较大,技术已成为必要。以下脚本演示了世界银行数据的线性回归实用程序和缓存下载程序省略了水印和绘图标签的代码代码应显示以下图像该计划下载年世界银行数据,并将婴儿死亡率与人均进行对比。 showImg(https://segmentfault.com/img/remote/1460000019179713); 来源 | 愿码(ChainDesk.CN)内容编辑 愿码Sl...

    mozillazg 评论0 收藏0
  • python并发 1:使用 futures 处理并发

    摘要:标准库中所有阻塞型函数都会释放,允许其他线程运行。如果调用引发异常,那么当从迭代器检索其值时,将引发异常。总结自版就支持线程了,只不过是使用线程的最新方式。类封装了模块的组件,使使用线程变得更加方便。下一篇笔记应该是使用处理并发。 作为Python程序员,平时很少使用并发编程,偶尔使用也只需要派生出一批独立的线程,然后放到队列中,批量执行。所以,不夸张的说,虽然我知道线程、进程、并行、...

    Kyxy 评论0 收藏0
  • 编写兼容 Python 2Python 3 代码

    摘要:注本文的作者是。原文的地址为该笔记向你展示了编写不会过时的兼容和的代码风格。它是在的演讲,。基本语法差异为了打印出多个。方方和工具没有提供一个选项自动完成这个。如果你为了个项目编写新的代码库,你可以用一个字符模块标记所有的字符字面量。 注:本文的作者是 Ed Schofield。原文的地址为: Cheat Sheet: Writing Python 2-3 compatible ...

    wangtdgoodluck 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<