Python学习笔记——python2与python3的区别

python2.7与python3.x的区别

自从学习python以来,一直使用的是python2.7,直到今年一直被警告,于是下定决心把2.7升级到3.6了。
由于python3与python2还是有一些区别的,因此总结了一下,同时还测试了同一台机器上py2与py3的速度区别,发现速度上区别也不可忽视,罗列如下:

以下截图都是在MacbookPro的Terminal上运行的ipython环境中截取的,分别运行python2.7和python3.6,左边是python2.7,右边是python3.6,首先比较语法上的区别,然后再测试速度区别;

python2.7与python3.x之间的语法区别:

print的区别

python3中的print是一个函数,而不再是一个语句,因此print后必须用括号括起来:
在这里插入图片描述

py3的print在操作上比py2更加灵活,print函数有两个参数sep = ’ '和end = '\n’是默认参数,修改这两个参数可以更容易地实现各种打印效果,如要实现打印后不换行,只需要写成下面形式即可

print('string1', 'string', '3', sep = ',', end = '\r')

整数除法的区别:

python2中,两个int型变量的四则运算结果仍然是int变量,包括除法,而在python3中,两个int型变量的除法结果会被调整为浮点型,其他运算方式不变。
整数除法运算

逻辑判断符号的区别:

在python2中,逻辑不等于可以写成”<>“,也可以写成“!="。但是在python3中,只能写成"!=":
不等号

byte类型的支持

在python3中,增加了对byte类型的支持,在python2中,并不存在这种数据类型,只有bytearray类型
byte类型

iterator对象的区别

python中的iterator对象或generator对象用来构造循环,在python3中,iterator对象已经没有.next()方法,获取下一个循环步骤需要使用next()函数实现:
iterator

对象的比较

python3里已经无法对某些对象进行直接比较:
对象比较

取消raw_input()函数

python3中已经取消了raw_input()函数,而input()函数代替了原来python2中raw_input()函数的功能,py2中的input函数则不复存在
input的区别

不再直接输出list的对象

python3中的range()函数不再直接输出一个list,而是输出一个iterator对象:
不再输出list
除此之外,zip函数和map函数的输出也不再是list,而是iterator
在这里插入图片描述
在这里插入图片描述
除此之外,dict类型的输出也不再是list:
在这里插入图片描述

数字圆整的区别

在python3中,小数的圆整不再是简单的四舍五入,而是采用“银行圆整法”根据整数部分的大小决定圆整的方向
在这里插入图片描述

py2与py3在速度上的区别

通过对比,发现py3的速度相对于py2是有提升的,这对需要考虑效率的朋友们是个好消息:

基本循环开销的区别

测试两个空循环的执行速度,用来对比循环的系统开销(overhead),测试结果py3胜
循环速度

循环速度的比较

使用一个打印N以内所有素数的程序,对比py2与py3在数值计算和列表(内存)操作方面的速度区别:
在这里插入图片描述
上图中iter_test()函数的定义如下:

def iter_test(N):
    for i in range(2, N):
        if N % i == 0:
            return False
    return True

对比结果,py3胜!

简单加法计算的速度对比:

简单的加法运算,Py3胜:
简单加法速度测试

numpy下的速度对比

对比python2和python3在使用numpy的计算速度对比,下列对比中,a和b的定义为:

import numpy as np
a = np.random.randint(1000, size = (1000, 1000))
b = np.random.random(size = (1000, 1000))

结果表明在使用numpy时两者速度差不多,有时候python2甚至还要快一些:
在这里插入图片描述

发布了15 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Shepherdppz/article/details/104080572