Python2 和 Python3 的主要区别

Python2和Python3中的主要区别

Python2 和 Python3的区别体现在如下几个方面:
1. print的改变
2. 编码的改变
3. True和False的改变
4. nonlocal关键字
5. 迭代器的改变

1. print的改变

在Python2中,print是一个语句,将print后面的视为元组对象,在Python3中是作为函数存在的,print函数可以接收多个位置的参数,即print(arg1,arg2,arg3,…agrn)的形式使用,输出的参数之间用空格隔开。例如下列代码:

#python2
>print ("hello world")#语句
hello world#命令行结果
>print ("hello world","hello guy")#语句
('hello world', 'hello guy')#命令行结果

#python3
>print ("hello world")#语句
hello world#命令行结果
>print ("hello world","hello guy")#语句
Hello World hello guy#命令行结果

2. 编码的改变

Python2默认ASCII编码方式,但是ASCII编码无法对中文等字符进行有效编码,因此在涉及到中文等其他字符的编码问题时,ASCII不仅无能为力,而且经常带来一些乱七八糟的错误,这也是Python2中经常出现编码错误的原因之一。之所以使用ASCII,是因为当初在Python2被设计的时候Unicode还没有被设计出来,因此使用了ASCII编码格式。而近些年来随着全球科技蓬勃发展,机器学习的潮流更是呈现出一片欣欣向荣之势,Python作为机器学习语言的不二之选,在全球范围内也变得炙手可热起来,随着使用人数与日俱增,字符编码的问题被越来越多的人所诟病,同时Python2中也存在一些与未来发展趋势南辕北辙的设计缺陷,考虑到目前的问题和未来的发展方向,Python社区的大佬们决定对python进行大刀阔斧的改革创新。终于,经过了反复商讨、撕逼、修改、骂娘等过程后,大佬们也逐渐平静下来,对于改革的方法达成了一致,2008年Python3.0横空出世!
自此以后,编写Python3.0以后的代码时,新手们的第一行代码再也不用因为纠结到底使用#coding = utf-8还是用# -- coding:utf-8 -- 而辗转反侧,彻夜难眠了,因为Python3默认采用了UTF-8编码。

3. True和False的改变

    Python2中True和False是两个全局变量,根据上述理解,变量可以进行赋值,于是可以有如下代码:
>>>True = False
>>>True
False

>>>True is False
True
>>>False = 'asdf'
>>>False
'asdf'

Python2中把True和False视作全局变量,因为是变量,因此可以随意进行赋值,对True和False赋值的操作,对于c/c++ java等程序员的来说,简直就是不敢想象的事情,我们已经习惯于将True和False视作关键字,毋庸置疑,这个属性给给Python2又贡献了一个槽点。于是在Python3中,True和False变成了两个关键字,指向了两个固定的对象,不能再被重新赋值。

4. nonlocal关键字

Python2中要想在嵌套函数中将一个变量声明为非局部变量简直就是异想天开的事情,然而在Python3中这是稀松平常的事情。Python3中加入了nonlocal关键字,可以在嵌套函数中给变量前面添加关键字nonlocal,就可以在嵌套函数之外使用嵌套函数中的变量。Python2中,如下代码所示:

def func():
    c = 1
    def foo():
        c = 12
    foo()
    print(c)
func()#结果是1

#Python3环境中运行
def func():
    c = 1
    def foo():
        nonlocal c
        c = 12
    foo()
    print(c)
func()#结果是12

上述区别信息来源于刘志军老师的博客,是本人的转述和一些个人见解,如有不当,还请批评指正!

猜你喜欢

转载自blog.csdn.net/t46414704152abc/article/details/79089451
今日推荐