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

发布时间:2019-08-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了python进阶笔记【2】 --- 一个奇怪的 __future__ 库脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

写在前面

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

正文

总所周知,python3.xpython2.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个。

脚本宝典总结

以上是脚本宝典为你收集整理的python进阶笔记【2】 --- 一个奇怪的 __future__ 库全部内容,希望文章能够帮你解决python进阶笔记【2】 --- 一个奇怪的 __future__ 库所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。