1.除法

Python2

Python3

int/int → int

int/int → float

  1. python2下整数除以整数返回整数类型,python3下整数除以整数返回浮点数类型
  2. 当某些语句假定变量为整数类型时,上面的区别会造成python3下的运行时错误。

建议兼容写法:

  1. 建议新写python2脚本时加入from __future__ import division, 这样Python2的脚本就会与python3行为一致,也返回浮点数。
  2. 必须使用整数的地方建议使用类型转换, int(), math.floor(), math.ceil(), floor(), round() 等
  3. 注意向下取整除法运算符"//" 只在两个操作数都为整数时返回整数类型,否则返回浮点数 x.0, 此运算符在python2和python3下行为一致。

2.数字

Python2

Python3

int类型的最大值为sys.maxint

int无最大值限制

long类型无最大值

取消long类型,所有整数为int类型

   

常量1L表示long类型的常量

1L为语法错误

   

八进制常量以0或0o开头

,如0600, 0o600

八进制常量只可以用0o开头,

如0o600

主要兼容问题:

  1. 长整型以及八进制常量在Python3的语法错误问题
  2. 运行时期间Python3找不到long类型

建议兼容写法:

  1. 八进制常数统一使用0o开头。
  2. 用if判断python的版本避免python3运行到含long的语句
  3. 判断变量是否为数字需要判断python的版本:isinstance(x, int) or (sys.version_info[0] < 3 and isinstance(x, long)
  4. 不要使用1L之类的数字常量,Python3下为语法错误, 可以使用long(1)来避免语法错误

3迭代器

Python2

Python3

def next():

def __next__()

iter.next()

一般不使用此语句

next(iter)

next(iter)

  1. python2与python3定义迭代器的函数名不一致
  2. python3的内置类中不再含有next()方法。

建议兼容写法:

  1. 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

建议兼容写法:

  1. 不使用iterkeys和has_keys
  2. 用 x in dict替代 dict.has_key(x)
  3. 当需要把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区别(续)的更多相关文章

  1. python2 python3区别

    Python开发团队将在2020年1月1日停止对Python2.7的技术支持,但python2的库仍然比较强大(在 pip 官方下载源 pypi 搜索 Python2.7 和 Python3.5 的第 ...

  2. Python之路Python3【第零篇】Python2 & Python3区别持续更新~

    print def print(self, *args, sep=' ', end='\n', file=None): # known special case of print "&quo ...

  3. 1. Python2 ,Python3区别

    Python2: 1. 源码都含有PHP,Java,C等语言的规范陋习. 2.重复代码比较多. Python3: 源码很规范,清晰,简单,符合Python的宗旨.

  4. python学习日记(python2/3区别补充,is / id/ encode str,bytes)

    python2和python3区别 print python2中,print 是语句 :用法 ---->print '***' python3中,print 是函数:用法----->pri ...

  5. 同时安装 Python2 & Python3 cmd下版本自由选择

    系统:win7 python2.7,python3.6同时安装,于是问题来了,python27与python36文件夹下的文件名都是python.exe 这样在cmd下,直接输入python,自动执行 ...

  6. python2&python3

    1.Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')   Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi ...

  7. Ubuntu安装Python2+Python3

    sudo apt-get install python2.7 python2.7-dev sudo apt-get install python3 命令: python 默认执行python2 pyt ...

  8. Ubuntu16.04 下python2 | python3

    在终端分别输入python,python2,python3 python和python2默认都是python2 python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 s ...

  9. windows和linux下 Python2,Python3 的环境及安装

    目录 windows和linux下 Python2,Python3 的环境及安装 window下安装 一. 手动安装 二. pip安装 linux下 安装 更新Python 笔者有话 windows和 ...

随机推荐

  1. Pandas透视表和交叉表

    透视表 参数名 说明 values 待聚合的列的名称.默认聚合所有数值列 index 用于分组的列名或其他分组键,出现在结果透视表的行 columns 用于分组的列表或其他分组键,出现在结果透视表的列 ...

  2. tensorflow源码阅读(c++)(一)

    root/tensorflow/core |--common_runtime # 公共运行库 |--distributed_runtime # 分布式执行模块,含有grpc session, grpc ...

  3. python相关注册登录方式

    1.使用django自带功能实现登录/退出登录 使用django自带登录功能,前提生成用户(用户注册)使用的是django自带的user,或称models中用户表继承于django自带的user 1. ...

  4. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-8CDH5安装和集群配置

    Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了.      准备文件 从 http://archive.cloudera.com/cdh5/par ...

  5. poj 1141 Brackets Sequence 区间dp,分块记录

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35049   Accepted: 101 ...

  6. TreeView的三种状态,全选,全不选,半选中

    我知道的设置treeview节点的三种状态,如果不是买的控件,那么通过代码,只能设置两种状态,我知道的有三种方法, 第一种是重写treeview,第二种是把三种状态做成小图标,让节点复选框随着不同的状 ...

  7. pytho命名规范

    1变量小写 多个单词  下划线 2 常量 全大写 3

  8. java 调用存储过程

    1.java 中调用pl/sql 中的存储过程 call 存储过程的名称(参数名称,参数名称)  在service 层中调用  存储过程  String  sql=" call  proc_ ...

  9. 显式Intent 和隐式 Intent 的区别

    显式 Intent : 在知道目标组件名称的前提下,去调用Intent.setComponent().Intent.setClassName()或Intent.setClass()方法或者在new I ...

  10. JS判断一个数组中有无重复元素(数字)

    前段时间遇到了这个问题 也百度了很多 不过还是用自己的方法解决了 一个超级简单的方法 简单到令人发指 由于直接写文本太丑了 所以还是截图吧 嘻嘻嘻 假如有一个这样的数组 (这是假如  可能每个人的数据 ...