博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python2与Python3的区别
阅读量:5287 次
发布时间:2019-06-14

本文共 2972 字,大约阅读时间需要 9 分钟。

 编码:

  • Python2的默认编码是ASCII码,这是导致Python2中经常遇到编码问题的主要原因之一,至于原因,在于Python这门语言出现的时候,还没有Unicode!
  • Python3默认编码是Unicode,因此,不必再文件顶部写# codeing=utf-8了。
# Python2:import sys>>>sys.getdefaultencoding()'ascii'# Python3:import sys>>>sys.getdefaultencoding()'utf-8'
查看默认编码

字符串:

  • Python2中,字符串有两种类型,Unicode和str,前者表示文本字符串,后者表示字节序列,但在Python2中并没有严格的界限,所以容易出错。
  • Python3中,str表示字符串,byte表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列,这就从源头上阻止编码错误的问题。 

True和False:

  • Python2中true和false是两个全局变量,在数值上对应1和0
  • Python3则把true和false指定为关键字,永远指向两个固定的对象,不能被重新赋值
# Python2:>>> True = False>>> TrueFalse>>> True = 1>>> True1>>> False = 'x'>>> False'x'# Python3:>>> True = False  File "
", line 1SyntaxError: can't assign to keyword>>> True = 1 File "
", line 1SyntaxError: can't assign to keyword>>> import keyword>>> keyword.iskeyword('True')True>>> keyword.kwlist['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
True和False的区别

nonlocal:

  • Python2中无法给嵌套函数中的变量声明为非局部变量,只能使用global关键字声明某个变量为全局变量
  • Python3中新增关键字nonlocal,可以解决这一问题
a = 3def func1():    a = 1    def foo():        a = 2    foo()    print(a)  # 1func1()def func2():    a = 1    def foo():        nonlocal a        a = 2    foo()    print(a)  # 2func2()
nonlocal

语法:

  • 去除了 <> ,全部使用 !=  # python2两个都可以,python3则只能用 !=
  • 去除 '' ,新增repr()
  • 新增关键字:as,with,True,False,None
  • 整形除法返回浮点数,如想要得到整形结果,使用 // 
  • 去除print语句,变为print()函数实现相同功能,同样的还有exec语句,改为exec()函数
  • 改变了顺序操作符的行为,例如,x > y,当x和y类型不同时则抛出TypeError,而不是返回bool值
  • 输入函数由raw_input改为input
  • 去除元组参数解包,不能再def(a,(b,c)):pass这样定义函数
  • 新的super(),可以不用传递参数
#Python2>>> 6 / 23>>> 6 //23>>> 1 <> 2True>>> 1 != 2True>>> 'a' < 1False>>> 'a' < 1False>>> 'a' > 1True#Python3>>> 6 / 23.0>>> 6 //23>>> 1 <> 2  File "
", line 1 1 <> 2 ^SyntaxError: invalid syntax>>> 1 != 2True>>> 'a' < 1Traceback (most recent call last): File "
", line 1, in
TypeError: '<' not supported between instances of 'str' and 'int'
!=示例

 

异常:

  • 异常都继承BaseException
  • 用 raise Exception(args)代替 raise Exception, args语法 
  • 捕获异常的语法改变,引入了as关键字来标识异常实例

模块:

  • 移除cPickle模块,可以使用pickle模块代替
  • 移除imageop模块
  • 移除bsddb模块
  • 移除new模块
  • os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
  • tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize() 

其它:

  • xrange()改为range(),要想使用range()获得一个list,必须显示调用:list(range(100))
  • bytes对象不能hash,也不支持 b.lower()、b.strip()和b.split()方法,但对于后两者可以使用 b.strip(b’  
    \n\t\r \f’)和b.split(b’ ‘)来达到相同目的 
  • zip()、map()和filter()都返回迭代器。而apply()、 callable()、coerce()、 execfile()、reduce()和reload 
    ()函数都被去除了
  • Python3中file类被废弃
#Python2>>> file
# Python3>>> fileTraceback (most recent call last): File "
", line 1, in
NameError: name 'file' is not defined
file示例

 


摘自:

  •    # 字符编码

 


End

转载于:https://www.cnblogs.com/Neeo/p/8033520.html

你可能感兴趣的文章
树上的路径
查看>>
问题总结
查看>>
软件随笔
查看>>
Linux下SVN自动更新web [转]
查看>>
Openstack api 学习文档 & restclient使用文档
查看>>
poj100纪念
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
An easy problem
查看>>
MauiMETA工具的使用(一)
查看>>
LeetCode: Anagrams 解题报告
查看>>
Qt 中获取本机IP地址
查看>>
070102_赌博设计:概率的基本概念,古典概型
查看>>
IT人生的价值和意义 感觉真的有了
查看>>
JS DOM对象
查看>>
OGR – Merging Multiple SHP files
查看>>
创业公司该不该被收购?(转)
查看>>
sqlserver 行转列、列转行[转]
查看>>
【IScroll深入学习】解决IScroll疑难杂症
查看>>
python 数据类型
查看>>
108-PHP类成员protected和private成员属性不能被查看数值
查看>>