xingyemdd

导航

 

Python2与Python3区别

Python2:源码重复,不规范

Python3:整合源码,更清晰简单优美

一、默认编码格式不同

python2:默认编码ascii

修改编码格式,可以在第一行加#  -*-  encoding:utf-8  -*-

python3:默认编码utf-8

指定解释器: #!/user/bin/env python

二、数据类型不同

1、long(长整型)

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了

注意:在Python3里不再有long类型了,全都是int

三、语法不同

1、print

python2:print()两种用法

用法1:print  'abc'    

用法2:print('abc')

在python2.x中raw_input()和input()两个函数都存在,区别:

raw_input()#将所有输入作为字符串看待,返回字符串类型

input()#只能接收“数字”的输入,在对待纯数字时具有自己的特性,它返回所输入的数字的类型(int,float)

python3:print()一种用法

用法1:print('abc')

在python3.x中raw_input()和input()进行了整合,去除了raw_input(),仅保留 了input()函数,其接收任意输入,将所有输入默认为字符串处理,并返回字符串类型。

2、关键字 nonlocal

python2:没有nonlocal

python3:有nonlocal,不能对全局变量进行引用,可以对局部作用域的变量进行引用和更改

 1 def func1():
 2     name = 'Lily'
 3     print('1:',name)
 4     def func2():
 5         nonlocal name#修改局部变量
 6         name='Lucy'
 7         print('2:',name)
 8     func2()
 9     print('3:',name)
10 func1()
11 #>>>1: Lily
12 #>>>2: Lucy
13 #>>>3: Lucy

 3、range

python2:range 不管range多少 会生成一个列表 这个列表将用来存储所有的值
python3:range 不管range多少 都不会实际的生成任何一个值

1 #例:以下是python3运行的结果
2 from collections import Iterable,Iterator
3 print(range(100000000))
4 print(isinstance(range(100000000),Iterable))#判断是不是可迭代的
5 print(isinstance(range(100000000),Iterator))#判断是不是迭代器
6 #>>>range(0, 100000000)
7 #>>>True
8 #>>>False

 4、yield from

python2:无此用法
python3:可以使用此用法,简化代码

1 # yield from (python3中的用法)
2 def generator_func():
3     yield from range(5)
4     yield from 'hello'
5 #与下列代码相同
6     # for i in range(5):
7     #     yield i
8     # for j in 'hello':
9     #     yield j

 5、经典类和新视类

python两种类
经典类 py3已经灭绝了 在python2里还存在,在py2中只要程序员不主动继承object,这个类就是经典类 —— 深度优先
新式类 python3所有的类都是新式类,所有的新式类都继承自object —— 在多继承中遵循广度优先算法

posted on 2018-04-06 22:41  xingyemdd  阅读(144)  评论(0编辑  收藏  举报