python2与python3的区别

Python2 和Python3 的主要区别有以下几个方面:

 1、 在Python2中,print是一个打印语句,将Python后面的内容视为元组对象,直接打印出来,

在Python3中做为函数存在,print函数可以接收多个位置的参数,即print(arg1,arg2...argn)输出的参数之间用空格隔开,例:

1 #python2
2 print("hello world")#语句
3 # 命令行结果
4 hello world
5 print("hello world","hello world")#语句
6 # 命令行结果
7 ('hello world','hello world')
View Code
1 #python3
2 print("hello world")#语句
3 #命令行结果
4 hello world
5 print("hello world","hello world")#语句
6 #命令行结果
7 hello world hello world
View Code

2、编码的改变

 

在python2中有两种字符串类型str和unicode

  在python2中,str就是编码后的结果bytes,所以在Python2中,unicode字符编码的结果就是str/bytes

 

1 #coding:utf-8
2 s='' #在执行时,'林'会被以conding:utf-8的形式保存到新的内存空间中
3 
4 print repr(s) #'\xe6\x9e\x97' 三个Bytes,证明确实是utf-8
5 print type(s) #<type 'str'>
6 
7 s.decode('utf-8')
8 # s.encode('utf-8') #报错,s为编码后的结果bytes,所以只能decode
View Code

 

当python解释器执行到产生字符串的代码时(例如s=u'林'),会申请新的内存地址,然后将'林'以unicode的格式存放到新的内存空间中,所以s只能encode,不能decode

 

1 s=u''
2 print repr(s) #u'\u6797'
3 print type(s) #<type 'unicode'>
4 
5 
6 # s.decode('utf-8') #报错,s为unicode,所以只能encode
7 s.encode('utf-8') 
View Code

 

 

 

对于unicode格式的数据来说,无论怎么打印,都不会乱码

python3中的字符串与python2中的u'字符串',都是unicode,所以无论如何打印都不会乱码

在python3中也有两种字符串类型str和bytes\

  str是unicode

1 #coding:utf-8
2 s='' #当程序执行时,无需加u,'林'也会被以unicode形式保存新的内存空间中,
3 
4 #s可以直接encode成任意编码格式
5 s.encode('utf-8')
6 s.encode('gbk')
7 
8 print(type(s)) #<class 'str'>
View Code

 

Python2默认ASCII编码方式,但是ASCII编码无法对中文等字符进行有效编码,因此在涉及到中文等其他字符的编码问题时,ASCII不仅无能为力,而且经常带来一些乱七八糟的错误,这也是Python2中经常出现编码错误的原因之一。
2008年Python3.0横空出世,自此以后,编写Python3.0以后的代码时,新手们的第一行代码再也不用因为纠结到底使用#coding = utf-8还是用# -- coding:utf-8 -- 而辗转反侧,彻夜难眠了,因为Python3默认采用了UTF-8编码

3.True和False的改变

Python2把True 和False视为全局变量,可以随意赋值;Python3把True和False变成了两个关键字,指向了两个固定的对象,不能再被重新赋值。

4.nonlocal关键字

Python2中要想在嵌套函数中将一个变量声明为非局部变量是不可能的;Python3中加入了nonlocal关键字,可以在嵌套函数中给变量前面添加关键字nonlocal,就可在嵌套函数之外使用嵌套函数中的变量。

                    

posted @ 2019-08-06 14:00  周国全  阅读(144)  评论(0编辑  收藏  举报