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. spark内存分配

    问题描述 在测试spark on yarn时,发现一些内存分配上的问题,具体如下. 在$SPARK_HOME/conf/spark-env.sh中配置如下参数: SPARK_EXECUTOR_INST ...

  2. S19 文件详解

    http://blog.csdn.net/finewind/article/details/5483554

  3. get() got an unexpected keyword argument

    TypeError: get() got an unexpected keyword argument 'news_id'ERROR basehttp 154 "GET /news/3/ H ...

  4. 第八周博客作业 <西北师范大学| 周安伟>

    第八周博客作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求博客链接https://www.cnblogs.com/nwnu-daizh/p/10687 ...

  5. 方位话机X2主、备用服务器问题

    1.当主.备用服务器有关联时采用开启分组,SIP1.SIP2的方式 2.当主.备用服务器无关联时采用,SIP1主.备用服务器的方式

  6. Linux使用yum安装JDK

    安装jdk8 检查系统是否自带open-jdk输入命令: #rpm -qa|grep java #rpm -qa|grep jdk 如果没有输入信息表示没有安装,如果安装可以输入命令:#rpm -qa ...

  7. maven学习--1.项目结构及简单使用

    1.项目目录结构 MavenProjectRoot(项目根目录)   |----src   |     |----main   |     |         |----java ——存放项目的.ja ...

  8. 用同一台PC的两个网口实现Iperf的server端和client端

    用同一台PC的两个网口实现Iperf的server端和client端 2015年10月20日 20:35:11 阅读数:2943 有时候需要发包,仅仅需要一定速率的流量,并不需要关心收到报文的大小,一 ...

  9. php实现仿百度分页

    本文主要和大家分享php实现仿百度分页的实例,先来看一下效果图. 基本策略 1, 首先要查询总记录数 2, 设置每页显示的数量并计算总页数 3, 增加一个get传值num代表当前访问的是哪一页,如果没 ...

  10. 201621123002《java程序设计》第十三周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...