小白看过来,今天带你了解python2和python3的区别

看到这个题目大家可能猜到了我接下来要讲些什么,呵呵,对了,那就是列出这两个不同版本间的却别! 搜索一下大家就会知道,python有两个主要的版本,python2 和 python3 ,但是python又不同于其他语言,向下兼容,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的,下面就来总结一下python2和python3的区别。

src=http___cdn 1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果。 Py3.1性能比Py2.5慢15%,还有很大的提升空间。 2.编码 Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的: >>> 中国 = 'china' >>>print(中国) china 3.语法 1)去除了<>,全部改用!= 2)去除``,全部改用repr() 3)关键词加入as 和with,还有True,False,None 4)整型除法返回浮点数,要得到整型结果,请使用// 5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量 6)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数 例如: 2.X: print "The answer is", 22 3.X: print("The answer is", 22) 2.X: print x, # 使用逗号结尾禁止换行 3.X: print(x, end=" ") # 使用空格代替换行 2.X: print # 输出新行 3.X: print() # 输出新行 2.X: print >>sys.stderr, "fatal error" 3.X: print("fatal error", file=sys.stderr) 2.X: print (x, y) # 输出repr((x, y)) 3.X: print((x, y)) # 不同于print(x, y)! 7)改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的 bool值
8)输入函数改变了,删除了raw_input,用input代替: 2.X:guess = int(raw_input('Enter an integer : ')) # 读取键盘输入的方法 3.X:guess = int(input('Enter an integer : '))

9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了 10)新式的8进制字变量,相应地修改了oct()函数。 2.X的方式如下: >>> 0666 438 >>> oct(438) '0666' 3.X这样: >>> 0666 SyntaxError: invalid token (<pyshell#63>, line 1) >>> 0o666 438 >>> oct(438) '0o666' 11)增加了 2进制字面量和bin()函数 >>> bin(438) '0b110110110' >>> _438 = '0b110110110' >>> _438 '0b110110110' 12)扩展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list 对象和seq是可迭代的。 13)新的super(),可以不再给super()传参数, >>> class C(object): def init(self, a): print('C', a) >>> class D(C): def __init(self, a): super().init(a) # 无参数调用super() >>> D(8) C 8 <main.D object at 0x00D7ED90> 14)新的metaclass语法: class Foo(*bases, **kwds): pass 15)支持class decorator。用法与函数decorator一样: >>> def foo(cls_a): def print_func(self): print('Hello, world!') cls_a.print = print_func return cls_a >>> @foo class C(object): pass >>> C().print() Hello, world! class decorator可以用来玩玩狸猫换太子的大把戏。更多请参阅PEP 3129 4. 字符串和字节串 1)现在字符串只有str一种类型,但它跟2.x版本的unicode几乎一样。

2)关于字节串,请参阅“数据类型”的第2条目 5.数据类型 1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long 2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下: >>> b = b'china' >>> type(b) <type 'bytes'> str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。 >>> s = b.decode() >>> s 'china' >>> b1 = s.encode() >>> b1 b'china' 3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 6.面向对象 1)引入抽象基类(Abstraact Base Classes,ABCs)。 2)容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.5多了很多。 >>> import collections >>> print('\n'.join(dir(collections))) Callable Container Hashable ItemsView Iterable Iterator KeysView Mapping MappingView MutableMapping MutableSequence MutableSet NamedTuple Sequence Set Sized ValuesView all builtins doc file name abcoll itemgetter sys defaultdict deque 另外,数值类型也被ABCs化。关于这两点,请参阅 PEP 3119和PEP 3141。 3)迭代器的next()方法改名为__next(),并增加内置函数next(),用以调用迭代器的__next_()方法 4)增加了@abstractmethod和 @abstractproperty两个 decorator,编写抽象方法(属性)更加方便。 7.异常 1)所以异常都从 BaseException继承,并删除了StardardError 2)去除了异常类的序列行为和.message属性 3)用 raise Exception(args)代替 raise Exception, args语法 4)捕获异常的语法改变,引入了as关键字来标识异常实例,在Py2.5中: >>> try: ... raise NotImplementedError('Error') ... except NotImplementedError, error:

1... print error.message 2... 3Error

在Py3.0中: >>> try: raise NotImplementedError('Error') except NotImplementedError as error: #注意这个 as print(str(error)) Error 5)异常链,因为__context__在3.0a1版本中没有实现 8.模块变动 1)移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。 2)移除了imageop模块 3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2,
rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块 4)移除了bsddb模块(单独发布,可以从http://www.jcea.es/programacion/pybsddb.htm获取) 5)移除了new模块 6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下 7)tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize() 9.其它 1)xrange() 改名为range(),要想使用range()获得一个list,必须显式调用: >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2)bytes对象不能hash,也不支持 b.lower()、b.strip()和b.split()方法,但对于后两者可以使用 b.strip(b’
\n\t\r \f’)和b.split(b’ ‘)来达到相同目的 3)zip()、map()和filter()都返回迭代器。而apply()、 callable()、coerce()、 execfile()、reduce()和reload ()函数都被去除了

现在可以使用hasattr()来替换 callable(). hasattr()的语法如:hasattr(string, 'name')

4)string.letters和相关的.lowercase和.uppercase被去除,请改用string.ascii_letters 等 5)如果x < y的不能比较,抛出TypeError异常。2.x版本是返回伪随机布尔值的 6)__getslice__系列成员被废弃。a[i:j]根据上下文转换为a.getitem(slice(I, j))或 __setitem__和 __delitem__调用 7)file类被废弃,在Py2.5中: >>> file <type 'file'> 在Py3.X中: >>> file Traceback (most recent call last): File "<pyshell#120>", line 1, in <module> file NameError: name 'file' is not defined

点赞
收藏

评论区

加载中...

相关推荐

Python4要来了?快来看看Python之父怎么说

大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题!从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的发展,关于Python4的发布也逐渐的成为了大家讨论的热点问题。前段时间菜鸟哥逛某国外论坛的时候,看到了针对于Python4的问题。Python之父

python的学习难?你的方法不对罢了,看看我的。

1、选择Python版本对于使用python的人来说,python的版本就是我们的工作环境,因此,在学习之前需要考虑好学习哪个版本,python2和python3的版本不同,会存在一些差异,虽说不大,但直接学习python3的话相对来说会好一点,而且跑一趟还能3相对来说对零基础的小白来说更加的友好,容易上手。2、学习Python基础知识Python是一个

初学者学习python2还是python3?

如果你是一个初学者,或者你以前接触过其他的编程语言,你可能不知道,在开始学习python的时候都会遇到一个比较让人很头疼的问题:版本问题!!是学习python2还是学习python3?这是非常让人纠结的!搜索一下便会发现python3和python2是不兼容的,而且差异比较大,到底学习哪个版本呢?下面就来为大家分析一下:当初设计Python3

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

Scapy 从入门到放弃

0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os

Pipenv创建和管理虚拟环境报的错

1、pipinstallpipenv安装Pipev时报错是因为我安装有python2和python3两个,选择如下的解决方式:1.python2mpipinstallxxx或者2.python3mpipinstallxxx2、pipenvinstall时出现如下错误:call