python2 python3区别(续)
1.除法
Python2 |
Python3 |
int/int → int |
int/int → float |
- python2下整数除以整数返回整数类型,python3下整数除以整数返回浮点数类型
- 当某些语句假定变量为整数类型时,上面的区别会造成python3下的运行时错误。
建议兼容写法:
- 建议新写python2脚本时加入from __future__ import division, 这样Python2的脚本就会与python3行为一致,也返回浮点数。
- 必须使用整数的地方建议使用类型转换, int(), math.floor(), math.ceil(), floor(), round() 等
- 注意向下取整除法运算符"//" 只在两个操作数都为整数时返回整数类型,否则返回浮点数 x.0, 此运算符在python2和python3下行为一致。
2.数字
Python2 |
Python3 |
int类型的最大值为sys.maxint |
int无最大值限制 |
long类型无最大值 |
取消long类型,所有整数为int类型 |
常量1L表示long类型的常量 |
1L为语法错误 |
八进制常量以0或0o开头 ,如0600, 0o600 |
八进制常量只可以用0o开头, 如0o600 |
主要兼容问题:
- 长整型以及八进制常量在Python3的语法错误问题
- 运行时期间Python3找不到long类型
建议兼容写法:
- 八进制常数统一使用0o开头。
- 用if判断python的版本避免python3运行到含long的语句
- 判断变量是否为数字需要判断python的版本:isinstance(x, int) or (sys.version_info[0] < 3 and isinstance(x, long)
- 不要使用1L之类的数字常量,Python3下为语法错误, 可以使用long(1)来避免语法错误
3迭代器
Python2 |
Python3 |
def next(): |
def __next__() |
iter.next() |
一般不使用此语句 |
next(iter) |
next(iter) |
- python2与python3定义迭代器的函数名不一致
- python3的内置类中不再含有next()方法。
建议兼容写法:
- def next(self):
....
....
def __next__(self):
return
self.next()
2. 如果基类中已经按照上面定义了__next__(), 改写了next()的派生类无需再定义__next__()
3. 不要使用iter.next(), 统一使用next(iter), 注意next()全局函数在python2下调用类的next()方法,在python3下调用类的__next()__方法.
4字典
Python2 |
Python3 |
dict.keys()返回列表 |
dict.keys()返回迭代器 |
dict.iterkeys()返回迭代器 |
无此语句 |
dict.items()返回列表 |
dict.items()返回迭代器 |
dict.has_key(x) |
无此函数 |
x in dict |
x in dict |
建议兼容写法:
- 不使用iterkeys和has_keys
- 用 x in dict替代 dict.has_key(x)
- 当需要把keys(), items() 的值赋给变量,或者作为函数的返回值的时候建议使用list()转换为列表。
5异常处理
Python2 |
Python3 |
except ImportError, e |
语法错误 |
except ImportError as e |
except ImportError as e |
raise ImportError,'msg' |
语法错误 |
raise ImportError("msg") |
raise ImportError("msg") |
以上全部使用Python3的写法, Python2的写法不再被Python3支持。Python3的写法在python2的语义相同
python2 python3区别(续)的更多相关文章
- python2 python3区别
Python开发团队将在2020年1月1日停止对Python2.7的技术支持,但python2的库仍然比较强大(在 pip 官方下载源 pypi 搜索 Python2.7 和 Python3.5 的第 ...
- Python之路Python3【第零篇】Python2 & Python3区别持续更新~
print def print(self, *args, sep=' ', end='\n', file=None): # known special case of print "&quo ...
- 1. Python2 ,Python3区别
Python2: 1. 源码都含有PHP,Java,C等语言的规范陋习. 2.重复代码比较多. Python3: 源码很规范,清晰,简单,符合Python的宗旨.
- python学习日记(python2/3区别补充,is / id/ encode str,bytes)
python2和python3区别 print python2中,print 是语句 :用法 ---->print '***' python3中,print 是函数:用法----->pri ...
- 同时安装 Python2 & Python3 cmd下版本自由选择
系统:win7 python2.7,python3.6同时安装,于是问题来了,python27与python36文件夹下的文件名都是python.exe 这样在cmd下,直接输入python,自动执行 ...
- python2&python3
1.Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi') Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi ...
- Ubuntu安装Python2+Python3
sudo apt-get install python2.7 python2.7-dev sudo apt-get install python3 命令: python 默认执行python2 pyt ...
- Ubuntu16.04 下python2 | python3
在终端分别输入python,python2,python3 python和python2默认都是python2 python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 s ...
- windows和linux下 Python2,Python3 的环境及安装
目录 windows和linux下 Python2,Python3 的环境及安装 window下安装 一. 手动安装 二. pip安装 linux下 安装 更新Python 笔者有话 windows和 ...
随机推荐
- k8s之调度约束
k8s调度约束有两种:第一种,直接指定某台node主机:这种形势将直接跳过调度器.如下: 第二种:先给各node指定标签,然后在通过标签的形势来关联node,这种形势人就会调用到调度器.如下: yao ...
- UVALive 3942 Remember the Word
题意:给出一个由S个不同单词组成的字典和一个长字符串.把这个字符串分解成若干个单词的连接(单词可以重复 使用),有多少种方法? Sample Input abcd 4 a b cd ab Sample ...
- MySql中SQL语句与其他数据库不一样的地方
目前发现的mysql与其他数据库如SqlServer.Oracle不同的地方 mysql中的注释(--)后要多加一个空格才生效 mysql中查询条件的字符串可以是双引号 mysql中查询条件的字符串不 ...
- 20175126《Java程序设计》第七周学习总结
# 20175126 2016-2017-2 <Java程序设计>第七周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第八章,本章主 ...
- vue props命名最好直接使用kebab-case (短横线隔开式) 命名
vue官方解释,props使用驼峰命名的话,在html中使用时也需要转化成短横线命名,否则报错.个人比较喜欢上下文统一,直接在props命名时就把它命名成短横线隔开式吧.
- java数据结构分析
java数据结构分析 此文章内容参考于:http://www.cnblogs.com/ysocean/ 一.数据结构总览图 1.数组 2.链表 3.栈 4.队列 5.二叉树 6.堆 7.散列 8.红黑 ...
- html(),text(),var()区别与用法
text() 设置或返回所选元素的文本内容 html() 设置或返回所选元素的内容(包括HTML标记) val() 设置或返回表单字段的值 用html()效果把html标签也获取出来了: 用val() ...
- WMI参数介绍
Win32_DiskDrive 硬盘 参数说明 vailability --设备的状态.BytesPerSector --在每个扇区的物理磁盘驱动器的字节数.Capabilities --媒体访 ...
- 手把手教学在Springboot中搭建使用Guava cache,包教包会,不会我输一包辣条给你
guava cache使用简介 概述 缓存是日常开发中经常应用到的一种技术手段,合理的利用缓存可以极大的改善应用程序的性能. Guava官方对Cache的描述连接 缓存在各种各样的用例中非常有用.例 ...
- CentOS7 修改静态IP地址
Ip配置文件在/etc/sysconfig/network-scripts文件夹下,查找该文件的方法为: [root@localhost ~]# ll /etc/sysconfig/network-s ...