python2与python3的区别
一、宏观区别
python2 源码不标准,混乱,重复代码多
python3 统一、标准、去除了重复代码
二、字符编码
python2 默认编码方式是ASCII码 所以默认编码方式下不支持中文,解决方式:在文件首行加上#-*- encoding:utf-8 -*-
如下:
#-*- encoding:utf-8 -*- print('Hello world')
python3 默认编码方式是UTF-8
三、基础数据类型
int(整型)
在32位机器上,整数的位数为32位,取值范围为-231~231-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807
long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
python2 中对于长整型,type()得到的数据类型是long;
python3 中对于长整型,type()得到的数据类型是int。
四、基本语句用法
1、print
python2中print可以加括号也可以不加,如 print 'abc' 或 print('abc')
python3中print只有一种用法,即加括号,print('abc')
2、range
python2中,有range()和xrange(),两个函数用法基本相同,但原理不同,range()是直接生成一个列表,而xrange()则是一个生成器,类似于迭代器。引用python手册中的原话:
"当需要元素的时候,xrange仍然要创建它们"。但是无论需要的序列多大,每次遍历时xrange消耗相同量的内存。在遍历极端的大序列时,这是相对于range的很大优势。另一个优势也是明显的:当你的代码在遍历已经产生的序列时调用break的话, xrange显然比range要好,因为xrange会消耗更少的内存。”
python3中,range()即为python2中的xrange()
3、input
python2中,分为raw_input()和input(),区别在于,raw_input()读取的输入流默认转换为字符串,而input()读取的输入流要按照基本格式输入,如要输入字符串需要加引号输入,数字则不需要,若输入的是字符串但没有加引号,则会报错。并且,若输入的是1+2,在input()中变量接收到的值则是3
python3中只有input(),而它相当于python2中的raw_input(),默认得到的输入都是字符串
4、yield from
python2中没有yield from
python3中新增了yield from
五、while 1和while True
python2中 while 1 的效率要比 while True 高,是因为在python2中True并非关键字,可以被赋值,这就需要程序运行到True判断时要去判断True的值到底是什么,所以要花费更多时间
python3中 True成为了关键字,因此while 1 和 while True 的效率是相同的(自己并没有验证,主要是不会orz,但看着说的蛮有道理)

浙公网安备 33010602011771号