python3和python2 优势_python3和python2的区别

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", 2*2

3.X: print("The answer is", 2*2)

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

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 (, 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

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)

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:

...    print error.message

...

Error

在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

在Py3.X中:

>>> file

Traceback (most recent call last):

File "", line 1, in

file

NameError: name 'file' is not defined

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发进程同步

P是荷兰语Proberen&#xff08;测试&#xff09;的首字母。为阻塞原语&#xff0c;负责把当前进程由运行状态转换为阻塞状态&#xff0c;直到另外一个进程唤醒它。也就是不好的一方面。 V是荷兰语Verhogen&#xff08;增加&#xff09;的首字母。为唤醒原语&#xff0c;负责把一…

寄存器和pin_16x2 LCD的PIN图和寄存器

寄存器和pinIn these years the LCD is finding widespread use. It has replaced the LEDs or other multi-segment LEDs.This is due to the following reasons: 近年来&#xff0c; LCD正在广泛使用。 它已替换LED或其他多段LED&#xff0c;原因如下&#xff1a; The decli…

【Java IO知识】读取中文乱码问题解决

读取文件主要是要设置读取的输入流如InputStreamReader时要设置读取的解码格式,要和文件本身的编码格式相同,这样读取出来的才不会乱码。 InputStreamReader reader new InputStreamInputReader(input, "编码格式"); ANSI是"gbk" 注:必须是在读取的时候就…

ffplay分析(视频解码线程的操作)

《ffplay的数据结构分析》 《ffplay分析&#xff08;从启动到读取线程的操作&#xff09;》 《ffplay分析&#xff08;音频解码线程的操作&#xff09;》 《ffplay 分析&#xff08;音频从Frame(解码后)队列取数据到SDL输出&#xff09;》 《ffplay分析 &#xff08;视频从Fram…

【转】.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)

今天继续利用准备WSE安全开发文章的空闲时间&#xff0c;完善《.NET深入学习笔记》系列&#xff08;基本都是.Net重要的知识点&#xff0c;我都做了详细的总结&#xff0c;是什么、为什么、和怎么实现&#xff09;。想必很多人也接触过这两个概念。做过C的人对深浅拷贝的概念一…

c语言数组-1_C数组-智能问题与解答

c语言数组-1C programming Arrays (One-D Array, Two-D Array) Aptitude Questions and Answers : In this section you will find C Aptitude Questions and Answers on One Dimensional (1D) and Two Dimensional (2D) array. C编程数组(一维数组&#xff0c;二维数组)能力问…

abap 添加alv上的工具栏的按钮_Excel里的置顶功能——快速访问工具栏

100万职场人都在看后台回复礼包领199元职场干货大家好&#xff0c;我是小可~今天跟大家分享一个提高Excel操作效率的小技巧自定义你的快速访问工具栏设置后的效果▼▼▼也就是把你最经常用到的两三个功能放到快速访问工具栏可以一眼就找到这些功能不需要靠快捷键或者功能选项卡…

用递归法求1²+2²+...+n²的值

思路分析: 谈到递归,我个人会联想到数学里面的通式。因为递归调用的函数的对应法则是相同的。例如这道题:f(x)=x。这个就是函数通式,只不过把每个求得的结果进行累加求和即可。用户输入5的时候,会出现f(5)=5,之后再进行x减一操作,执行f(4)=4,最后将每个进行累加即可。…

机器学习资料推荐

机器学习资料推荐 机器学习的资料 1:斯坦福大学视频(作为入门教程&#xff0c;网易有中文字幕&#xff0c;而且讲义也有翻译版本&#xff09;20集200左右讲义 2&#xff1a;机器学习 Tom M.Mitchell(虽然出版10多年&#xff0c;但是通俗易懂的内容&#xff0c;让读者对机器学习…

ffplay源码(版本:ffmpeg-4.2.1)

ffplay源码&#xff08;版本&#xff1a;ffmpeg-4.2.1&#xff09; /** Copyright (c) 2003 Fabrice Bellard** This file is part of FFmpeg.** FFmpeg is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* Lic…

stringwriter_Java StringWriter toString()方法与示例

stringwriterStringWriter类的toString()方法 (StringWriter Class toString() method) toString() method is available in java.io package. toString()方法在java.io包中可用。 toString() method is used to represent the buffer current value in terms of string. toStr…

编写一个函数,计算下式当n=10和n=100的值。

思路分析: 首先,我个人看法:当我拿到这道题的时候,我会把它当成一道数学题对待。分子是动的,恒为一,分母是进行依次增加的。且奇数项为正,偶数项为负。因为设计运算出现的是分数,故,设计选取存储类型为double。 找出问题: ①正负号问题、②分母问题、③累计求和问题…

POJ 1001 大数的乘法

对这道题的理解 大数的乘法 关键是 实型的 那么首先就是数出来小数点有几位这个相信很简单 从后面往前数刚开始0 不算接着就是遇到小数点结束如果没有小数点 那么置为0 接着就是输出地时候首先算出小数点的位置然后输出 你想怎么样都行 从后往前数这个时候输出 那么就是你也…

铃木uy125摩托车机油_济南铃木安徽发布国四新车—6480元瑞梦125、9380元UY125

安徽合肥&#xff0c;这个具有两千多年历史的古城&#xff0c;以“三国故地、包拯家乡”而闻名海内外&#xff0c;2019年4月22日济南铃木为这座城市带来一份惊喜&#xff0c;今年正值国四执行&#xff0c;济南铃木旗下两款国四新车瑞梦125与UY125正式在合肥与大家相见。济南铃木…

Andrej Karpathy最新大模型入门视频讲解

最近这两天&#xff0c;特斯拉前AI总监 现在在OpenAI的安德烈卡帕西&#xff08;Andrej Karpathy&#xff09;的新教程火了 这次 他专门面向普通大众做了一个关于大语言模型的科普视频 时长1个小时&#xff0c;全部为“非技术介绍”&#xff0c; 涵盖了模型推理、训练、微…

Jquery 寻找父、子、兄弟节点

JQUERY的父&#xff0c;子&#xff0c;兄弟节点查找方法 jQuery.parent(expr) 找父亲节点&#xff0c;可以传入expr进行过滤&#xff0c;比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(exp…

编写一个程序,计算用户输入的起始时间到终止时间之间相隔的天数。

思路分析&#xff1a; 闰年&#xff1a;闰年又分为普通闰年和世纪闰年 普通闰年&#xff1a;能被4整除且不能被100整除的为闰年(2004为闰年&#xff0c;1999不是闰年) 世纪闰年&#xff1a;能被400整除的是闰年(2020年是闰年&#xff0c;1900年不是闰年) 闰年共有366天&#x…

longvalue_Java Short类longValue()方法及示例

longvalue短类longValue()方法 (Short class longValue() method) longValue() method is available in java.lang package. longValue()方法在java.lang包中可用。 longValue() method is used to return the value denoted by this Short object converted to type long (by …

mvc的Controller返回值类型ActionResult详解

一、简介 ActionResult 操作方法通过执行工作并返回操作结果来响应用户输入。 操作结果表示框架将代表操作方法执行的命令。 ActionResult 类是操作结果的基类。 以下类型从 ActionResult 派生&#xff1a; ContentResult EmptyResult FileResult HttpUnauthorizedResult …

栅格布局一般怎么用_建筑混凝土色差大怎么办?用这种方法处理,一般都看不出来...

由于模板锈蚀、脱模剂污染、原材料等原因&#xff0c;建筑混凝土成形后经常会遇到颜色不一致的现象&#xff0c;为此我们总结了混凝土面色差调整施工工艺&#xff0c;可供大家参考使用。一、混凝土面色差调整施工工艺流程及说明基层表面打磨→吸尘器吸尘→湿润墙面→素水泥处理…