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,但看着说的蛮有道理)

 

posted @ 2018-08-01 21:02  蜜酥糖糖糖丶  阅读(608)  评论(0)    收藏  举报