python2 和 python3兼容写法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python2 和 python3兼容写法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2850字,纯文字阅读大概需要5分钟。
内容图文
![python2 和 python3兼容写法](/upload/InfoBanner/zyjiaocheng/845/1568be57ffd84ed48464d835e2c57c50.jpg)
一:使用ImportError,Python3中将一些Python2的模块名称做了修改,需要我们做一些处理来保证代码在不同Python版本中能够正常运行
# -*- coding: utf-8 -*- try: # Python3 from configparser import ConfigParser except ImportError: # Python2 from ConfigParser import ConfigParser config = ConfigParser() # do something
urllib库也是不兼容Python2和Python3的
# -*- coding: utf-8 -*- try: # Python2 from urllib import urlencode from urllib import quote from urlparse import urlparse import urllib2 as request except ImportError: # Python3 from urllib.parse import urlencode from urllib.parse import quote from urllib.parse import urlparse import urllib.request as request # do something
二:根据版本来判断
根据sys.version_info.major来判断Python的版本,根据不同的版本导入不同的库。
# -*- coding: utf-8 -*- import sys if sys.version_info.major == 2: # Python2 from urllib import urlencode from urllib import quote from urlparse import urlparse import urllib2 as request else: # Python3 from urllib.parse import urlencode from urllib.parse import quote from urllib.parse import urlparse import urllib.request as request # do something
三、使用脚本将py2代码转为py3
使用命令2to3 -w file.py可以直接在原地修改文件。其他命令可以使用2to3 --help查看;2to3 file.py可以看到转变前后的内容对比
2to3是python自带的一个代码转换工具,可以将python2的代码自动转换为python3的代码。当然,不幸的是转换出的代码并没有对python2的兼容做任何的处理。所以我们并不真正使用2to3转换出的代码。执行 2to3 file.py 查看输出信息,并修正相关问题。
四、使用python -3执行python程序
2to3 可以检查出很多python2&3的兼容性问题,但也有很多问题是2to3发现不了的。在加上 -3 参数后,程序在运行时会在控制台上将python2和python3不一致,同时2to3无法处理的问题提示出来。比如python3和python2中对除法的处理规则做过改变。使用-3参数执行4/2将提示 DeprecationWarning: classic int division 。
python -3 file.py
五、使用__future__导入
使用python3的print函数,禁用python2的print语句:from __future__ import print_function
像python3一样,int除以int得float,而不像Python2那样是整除:
from __future__ import division
像python3一样,字符串字面量的类型为文本(python2中的unicode,python3中的str),而不是字节(python2中的str,python3中的bytes)
from __future__ import unicode_literal
?
python2和python3的print不完全一样,print在python2中是个关键字,是个函数
Python3 | Python2 |
---|---|
input() | raw.input(),sys.readline() |
整除// | / |
Python3 | Python2 |
---|---|
unittest.mock.MagicMock | mock.MagicMock |
urllib.request.urlretrieve | urllib.urlretrieve |
queue | Queue |
functools.reduce | reduce |
列表推导式的变量作用域
在Python2中,列表推导式中的索引变量的是可以泄露到其封闭作用域中的。而Python3中则不可以。
下面举一个简单的例子说明这个问题,如我们在一个for循环内部使用列表推导式
for i in range(2):
a = [i for i in range(5)]
print(i)
1
2
3
在Python3中,上面的代码输出为
>>0
>>1
1
2
而在Python2中,上面的代码输出为
>>4
>>4
参考:
http://python.jobbole.com/83987/
https://blog.csdn.net/u012151283/article/details/58049151
内容总结
以上是互联网集市为您收集整理的python2 和 python3兼容写法全部内容,希望文章能够帮你解决python2 和 python3兼容写法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。