Python3.x和Python2.x的区别-.pdf

上传人:索**** 文档编号:76250190 上传时间:2023-03-08 格式:PDF 页数:33 大小:372.97KB
返回 下载 相关 举报
Python3.x和Python2.x的区别-.pdf_第1页
第1页 / 共33页
Python3.x和Python2.x的区别-.pdf_第2页
第2页 / 共33页
点击查看更多>>
资源描述

《Python3.x和Python2.x的区别-.pdf》由会员分享,可在线阅读,更多相关《Python3.x和Python2.x的区别-.pdf(33页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Python3.x 和 Python2.x的区别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)整型除法返回浮点数,要得到整型结果,请使用

2、/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

3、=sys.stderr)2.X:print(x,y)#输出 repr(x,y)3.X:print(x,y)#不同于 print(x,y)!7)改变了顺序操作符的行为,例如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=s

4、eq 都是合法的,只要求两点: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

5、(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 类型

6、,对应于2.X 版本的八位串,定义一个bytes 字面量的方法如下:b=bchina type(b)str 对象和 bytes 对象可以使用.encode()(str-bytes)or.decode()(bytes-str)方法相互转化。s=b.decode()s china b1=s.encode()b1 bchina 3)dict 的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有dict.has_key(),用in 替代它吧6.面向对象1)引入抽象基类(Abstraact Base Classes,ABCs)。2

7、)容器类和迭代器类被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_

8、 _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 Excepti

9、on(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_ 在

10、 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)移除了

11、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 ntr f)和 b.split(b

12、 )来达到相同目的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 file 在 Py3.X中:file Traceback(most recent call last)

13、:File,line 1,in file NameError:name file is not defined 使用2to3将代码移植到 PYTHON 3 概述#几乎所有的 Python 2程序都需要一些修改才能正常地运行在Python 3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会将你的Python 2程序源文件作为输入,然后自动将其转换到Python 3的形式。案例研究:将chardet移植到 Python 3(porting chardet to Python 3)描述了如何运行这个脚本,然后展示了一些它不能

14、自动修复的情况。这篇附录描述了它能够自动修复的内容。print语句#在 Python 2里,print是一个语句。无论你想输出什么,只要将它们放在print关键字后边就可以。在 Python 3里,print()是一个函数。就像其他的函数一样,print()需要你将想要输出的东西作为参数传给它。Notes Python 2 Python 3 printprint()print1print(1)print1,2print(1,2)print1,2,print(1,2,end=)printsys.stderr,1,2,3print(1,2,3,file=sys.stderr)1.为输出一个空白行,

15、需要调用不带参数的print()。2.为输出一个单独的值,需要将这这个值作为print()的一个参数就可以了。3.为输出使用一个空格分隔的两个值,用两个参数调用print()即可。4.这个例子有一些技巧。在Python 2里,如果你使用一个逗号(,)作为print语句的结尾,它将会用空格分隔输出的结果,然后在输出一个尾随的空格(trailing space),而不输出回车(carriage return)。在Python 3里,通过把end=作为一个关键字参数传给print()可以实现同样的效果。参数end的默认值为n,所以通过重新指定end参数的值,可以取消在末尾输出回车符。5.在 Pyth

16、on 2里,你可以通过使用pipe_name语法,把输出重定向到一个管道,比如sys.stderr。在 Python 3里,你可以通过将管道作为关键字参数file的值传递给print()来完成同样的功能。参数file的默认值为std.stdout,所以重新指定它的值将会使print()输出到一个另外一个管道。UNICODE字符串#Python 2有两种字符串类型:Unicode字符串和非 Unicode 字符串。Python 3 只有一种类型:Unicode字符串(Unicode strings)。Notes Python 2 Python 3 uPapayaWhipPapayaWhip ur

17、 PapayaWhipfoor PapayaWhipfoo1.Python 2里的 Unicode 字符串在 Python 3里即普通字符串,因为在 Python 3里字符串总是 Unicode形式的。2.Unicode 原始字符串(raw string)(使用这种字符串,Python 不会自动转义反斜线)也被替换为普通的字符串,因为在Python 3里,所有原始字符串都是以Unicode 编码的。全局函数unicode()#Python 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成 Unicode 字符串,还有str()把对象转换为非Unicode 字符串。Py

18、thon 3只有一种字符串类型,Unicode 字符串,所以str()函数即可完成所有的功能。(unicode()函数在 Python 3 里不再存在了。)Notes Python 2 Python 3 unicode(anything)str(anything)long长整型#Python 2有为非浮点数准备的int和long类型。int类型的最大值不能超过sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。在 Python 3里,只有一种整数类型int,大多数情况下,它很像Python 2 里的长整型。由于已

19、经不存在两种类型的整数,所以就没有必要使用特殊的语法去区别他们。进一步阅读:pep 237:统一长整型和整型。Notes Python 2 Python 3 x=1000000000000Lx=1000000000000 x=0 xFFFFFFFFFFFFLx=0 xFFFFFFFFFFFF long(x)int(x)type(x)islongtype(x)isint isinstance(x,long)isinstance(x,int)1.在 Python 2里的十进制长整型在Python 3 里被替换为十进制的普通整数。2.在 Python 2里的十六进制长整型在Python 3 里被替换

20、为十六进制的普通整数。3.在 Python 3里,由于长整型已经不存在了,自然原来的long()函数也没有了。为了强制转换一个变量到整型,可以使用int()函数。4.检查一个变量是否是整型,获得它的数据类型,并与一个int类型(不是long)的作比较。5.你也可以使用isinstance()函数来检查数据类型;再强调一次,使用int,而不是long,来检查整数类型。比较运算符#Python 2支持作为!=的同义词。Python 3只支持!=,不再支持 了。Notes Python 2 Python 3 if x y:if x!=y:if x y z:if x!=y!=z:1.简单地比较。2.相

21、对复杂的三个值之间的比较。字典类方法has_key()#在 Python 2里,字典对象的has_key()方法用来测试字典是否包含特定的键(key)。Python 3不再支持这个方法了。你需要使用in运算符。Notes Python 2 Python 3 a_dictionary.has_key(PapayaWhip)PapayaWhipin a_dictionary a_dictionary.has_key(x)or a_dictionary.has_key(y)x in a_dictionary or y in a_dictionary a_dictionary.has_key(x or

22、 y)(x or y)in a_dictionary a_dictionary.has_key(x+y)(x+y)in a_dictionary x+a_dictionary.has_key(y)x+(y in a_dictionary)1.最简单的形式。2.运算符or的优先级高于运算符in,所以这里不需要添加括号。3.另一方面,出于同样的原因 or的优先级大于in,这里需要添加括号。(注意:这里的代码与前面那行完全不同。Python会先解释x or y,得到结果x(如果x在布尔上下文里的值是真)或者y。然后 Python检查这个结果是不是a_dictionary的一个键。)4.运算符in的优

23、先级大于运算符+,所以代码里的这种形式从技术上说不需要括号,但是2to3还是添加了。5.这种形式一定需要括号,因为in的优先级大于+。返回列表的字典类方法#在 Python 2里,许多字典类方法的返回值是列表。其中最常用方法的有keys,items和values。在 Python 3 里,所有以上方法的返回值改为动态视图(dynamic view)。在一些上下文环境里,这种改变并不会产生影响。如果这些方法的返回值被立即传递给另外一个函数,并且那个函数会遍历整个序列,那么以上方法的返回值是列表或者视图并不会产生什么不同。在另外一些情况下,Python 3的这些改变干系重大。如果你期待一个能被独立

24、寻址元素的列表,那么Python 3的这些改变将会使你的代码卡住(choke),因为视图(view)不支持索引(indexing)。Notes Python 2 Python 3 a_dictionary.keys()list(a_dictionary.keys()a_dictionary.items()list(a_dictionary.items()a_dictionary.iterkeys()iter(a_dictionary.keys()i for i in a_dictionary.iterkeys()i for i in a_dictionary.keys()min(a_dicti

25、onary.keys()no change1.使用list()函数将keys()的返回值转换为一个静态列表,出于安全方面的考量,2to3可能会报错。这样的代码是有效的,但是对于使用视图来说,它的效率低一些。你应该检查转换后的代码,看看是否一定需要列表,也许视图也能完成同样的工作。2.这是另外一种视图(关于items()方法的)到列表的转换。2to3对values()方法返回值的转换也是一样的。3.Python 3里不再支持iterkeys()了。如果必要,使用iter()将keys()的返回值转换成为一个迭代器。4.2to3能够识别出iterkeys()方法在列表解析里被使用,然后将它转换为

26、Python 3里的keys()方法(不需要使用额外的iter()去包装其返回值)。这样是可行的,因为视图是可迭代的。5.2to3也能识别出keys()方法的返回值被立即传给另外一个会遍历整个序列的函数,所以也就没有必要先把keys()的返回值转换到一个列表。相反的,min()函数会很乐意遍历视图。这个过程对min(),max(),sum(),list(),tuple(),set(),sorted(),any()和all()同样有效。被重命名或者重新组织的模块#从 Python 2到 Python 3,标准库里的一些模块已经被重命名了。还有一些相互关联的模块也被组合或者重新组织,以使得这种关联

27、更有逻辑性。http#在 Python 3里,几个相关的http 模块被组合成一个单独的包,即http。Notes Python 2 Python 3 importhttplibimport http.client importCookieimport http.cookies importcookielibimport http.cookiejar importBaseHTTPServerimportSimpleHTTPServerimportCGIHttpServerimport http.server1.http.client模块实现了一个底层的库,可以用来请求http 资源,解析 ht

28、tp 响应。2.http.cookies模块提供一个蟒样的(Pythonic)接口来获取通过 http 头部(http header)Set-Cookie 发送的 cookies 3.常用的流行的浏览器会把cookies以文件形式存放在磁盘上,http.cookiejar模块可以操作这些文件。4.http.server模块实现了一个基本的http 服务器urllib#Python 2有一些用来分析,编码和获取 URL的模块,但是这些模块就像老鼠窝一样相互重叠。在 Python 3 里,这些模块被重构、组合成了一个单独的包,即urllib。Notes Python 2 Python 3 impo

29、rturllibimport urllib.request,urllib.parse,urllib.error importurllib2import urllib.request,urllib.error importurlparseimport urllib.parse importrobotparserimport urllib.robotparser from urllib importFancyURLopenerfrom urllib importurlencodefrom urllib.request importFancyURLopenerfrom urllib.parse im

30、port urlencode from urllib2 importRequestfrom urllib2 importHTTPErrorfrom urllib.request importRequestfrom urllib.error importHTTPError1.以前,Python 2里的urllib模块有各种各样的函数,包括用来获取数据的urlopen(),还有用来将url 分割成其组成部分的splittype(),splithost()和splituser()函数。在新的urllib包里,这些函数被组织得更有逻辑性。2to3 将会修改这些函数的调用以适应新的命名方案。2.在 Py

31、thon 3里,以前的urllib2模块被并入了urllib包。同时,以urllib2里各种你最喜爱的东西将会一个不缺地出现在Python 3的urllib模块里,比如build_opener()方法,Request对象,HTTPBasicAuthHandler和 friends。3.Python 3里的urllib.parse模块包含了原来 Python 2 里urlparse模块所有的解析函数。4.urllib.robotparse模块解析robots.txt文件。5.处理 http 重定向和其他状态码的FancyURLopener类在 Python 3 里的urllib.request模

32、块里依然有效。urlencode()函数已经被转移到了urllib.parse里。6.Request对象在urllib.request里依然有效,但是像HTTPError这样的常量已经被转移到了urllib.error里。我是否有提到2to3也会重写你的函数调用?比如,如果你的Python 2 代码里导入了urllib模块,调用了urllib.urlopen()函数获取数据,2to3会同时修改import语句和函数调用。Notes Python 2 Python 3 import urllib printurllib.urlopen(http:/diveintopython3.org/).re

33、ad()import urllib.request,urllib.parse,urllib.error print(urllib.request.urlopen(http:/diveintopython3.org/).read()dbm#所有的 dbm 克隆(dbm clone)现在在单独的一个包里,即dbm。如果你需要其中某个特定的变体,比如gnu dbm,你可以导入dbm包中合适的模块。Notes Python 2 Python 3 importdbmimport dbm.ndbmimportgdbmimport dbm.gnuimportdbhashimport dbm.bsdimpor

34、tdumbdbmimport dbm.dumbimportanydbmimport whichdbimport dbmxmlrpc#xml-rpc 是一个通过 http 协议执行远程 rpc 调用的轻重级方法。一些xml-rpc 客户端和 xml-rpc 服务端的实现库现在被组合到了独立的包,即xmlrpc。Notes Python 2 Python 3 importxmlrpclibimport xmlrpc.clientimportDocXMLRPCServerimport xmlrpc.serverimportSimpleXMLRPCServer其他模块#Notes Python 2 P

35、ython 3 try:importcStringIOas StringIOexceptImportError:importStringIOimport io try:import cPickle as pickle exceptImportError:import pickleimport pickle import_builtin_import builtins importcopy_regimport copyreg importQueueimport queue importSocketServerimport socketserver importConfigParserimport

36、 configparser import reprimport reprlib importcommandsimport subprocess1.在 Python 2里,你通常会这样做,首先尝试把cStringIO导入作为StringIO的替代,如果失败了,再导入StringIO。不要在 Python 3 里这样做;io模块会帮你处理好这件事情。它会找出可用的最快实现方法,然后自动使用它。2.在 Python 2里,导入最快的pickle实现也是一个与上边相似的能用方法。在Python 3 里,pickle模块会自动为你处理,所以不要再这样做。3.builtins模块包含了在整个Python

37、语言里都会使用的全局函数,类和常量。重新定义builtins模块里的某个函数意味着在每处都重定义了这个全局函数。这听起来很强大,但是同时也是很可怕的。4.copyreg模块为用 C 语言定义的用户自定义类型添加了pickle模块的支持。5.queue模块实现一个生产者消费者队列(multi-producer,multi-consumer queue)。6.socketserver模块为实现各种 socket server 提供了通用基础类。7.configparser模块用来解析 ini-style 配置文件。8.reprlib模块重新实现了内置函数repr(),并添加了对字符串表示被截断前长

38、度的控制。9.subprocess模块允许你创建子进程,连接到他们的管道,然后获取他们的返回值。包内的相对导入#包是由一组相关联的模块共同组成的单个实体。在Python 2的时候,为了实现同一个包内模块的相互引用,你会使用import foo或者from foo import Bar。Python 2解释器会先在当前目录里搜索foo.py,然后再去 Python搜索路径(sys.path)里搜索。在 Python 3里这个过程有一点不同。Python 3不会首先在当前路径搜索,它会直接在Python的搜索路径里寻找。如果你想要包里的一个模块导入包里的另外一个模块,你需要显式地提供两个模块的相对

39、路径。假设你有如下包,多个文件在同一个目录下:chardet/|+-_init_.py|+-constants.py|+-mbcharsetprober.py|+-universaldetector.py 现在假设universaldetector.py需要整个导入constants.py,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?Notes Python 2 Python 3 import constantsfrom.import constants from mbcharsetprober importMultiByteCharSetProberfrom.mb

40、charsetprober importMultiByteCharsetProber1.当你需要从包的其他地方导入整个模块,使用新的from.import语法。这里的句号(.)即表示当前文件(universaldetector.py)和你想要导入文件(constants.py)之间的相对路径。在这个样例中,这两个文件在同一个目录里,所以使用了单个句号。你也可以从父目录(from.import anothermodule)或者子目录里导入。2.为了将一个特定的类或者函数从其他模块里直接导入到你的模块的名字空间里,在需要导入的模块名前加上相对路径,并且去掉最后一个斜线(slash)。在这个例子中,

41、mbcharsetprober.py与universaldetector.py在同一个目录里,所以相对路径名就是一个句号。你也可以从父目录(from.import anothermodule)或者子目录里导入。迭代器方法next()#在 Python 2里,迭代器有一个next()方法,用来返回序列里的下一项。在Python 3里这同样成立,但是现在有了一个新的全局的函数next(),它使用一个迭代器作为参数。Notes Python 2 Python 3 anIterator.next()next(anIterator)a_function_that_returns_an_iterator(

42、).next()next(a_function_that_returns_an_iterator()class A:defnext(self):passclass A:def _next_(self):pass class A:defnext(self,x,y):passno change next=42for an_iterator innext=42for an_iterator ina_sequence_of_iterators:an_iterator.next()a_sequence_of_iterators:an_iterator._next_()1.最简单的例子,你不再调用一个迭代

43、器的next()方法,现在你将迭代器自身作为参数传递给全局函数next()。2.假如你有一个返回值是迭代器的函数,调用这个函数然后把结果作为参数传递给next()函数。(2to3脚本足够智能以正确执行这种转换。)3.假如你想定义你自己的类,然后把它用作一个迭代器,在Python 3里,你可以通过定义特殊方法_next_()来实现。4.如果你定义的类里刚好有一个next(),它使用一个或者多个参数,2to3执行的时候不会动它。这个类不能被当作迭代器使用,因为它的next()方法带有参数。5.这一个有些复杂。如果你恰好有一个叫做next的本地变量,在 Python 3里它的优先级会高于全局函数ne

44、xt()。在这种情况下,你需要调用迭代器的特别方法_next_()来获取序列里的下一个元素。(或者,你也可以重构代码以使这个本地变量的名字不叫next,但是 2to3 不会为你做这件事。)全局函数filter()#在 Python 2里,filter()方法返回一个列表,这个列表是通过一个返回值为True或者False的函数来检测序列里的每一项得到的。在Python 3里,filter()函数返回一个迭代器,不再是列表。Notes Python 2 Python 3 filter(a_function,a_sequence)list(filter(a_function,a_sequence)l

45、ist(filter(a_function,a_sequence)no change filter(None,a_sequence)i for i in a_sequence if i for i in filter(None,a_sequence):no change i for i in filter(a_function,a_sequence)no change1.最简单的情况下,2to3会用一个list()函数来包装filter(),list()函数会遍历它的参数然后返回一个列表。2.然而,如果filter()调用已经被list()包裹,2to3不会再做处理,因为这种情况下filter

46、()的返回值是否是一个迭代器是无关紧要的。3.为了处理filter(None,.)这种特殊的语法,2to3会将这种调用从语法上等价地转换为列表解析。4.由于for循环会遍历整个序列,所以没有必要再做修改。5.与上面相同,不需要做修改,因为列表解析会遍历整个序列,即使filter()返回一个迭代器,它仍能像以前的filter()返回列表那样正常工作。全局函数map()#跟filter()作的改变一样,map()函数现在返回一个迭代器。(在 Python 2里,它返回一个列表。)Notes Python 2 Python 3 map(a_function,PapayaWhip)list(map(a

47、_function,PapayaWhip)map(None,PapayaWhip)list(PapayaWhip)map(lambda x:x+1,range(42)x+1 for x in range(42)for i in map(a_function,a_sequence):no change i for i in map(a_function,a_sequence)no change1.类似对filter()的处理,在最简单的情况下,2to3会用一个list()函数来包装map()调用。2.对于特殊的map(None,.)语法,跟filter(None,.)类似,2to3会将其转换成一

48、个使用list()的等价调用3.如果map()的第一个参数是一个lambda函数,2to3会将其等价地转换成列表解析。4.对于会遍历整个序列的for循环,不需要做改变。5.再一次地,这里不需要做修改,因为列表解析会遍历整个序列,即使map()的返回值是迭代器而不是列表它也能正常工作。全局函数reduce()#在 Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里。Notes Python 2 Python 3 reduce(a,b,c)from functools import reduce reduce(a,b,c)全局函数apply

49、()#Python 2有一个叫做apply()的全局函数,它使用一个函数f和一个列表a,b,c作为参数,返回值是f(a,b,c)。你也可以通过直接调用这个函数,在列表前添加一个星号(*)作为参数传递给它来完成同样的事情。在 Python 3里,apply()函数不再存在了;必须使用星号标记法。Notes Python 2 Python 3 apply(a_function,a_list_of_args)a_function(*a_list_of_args)apply(a_function,a_list_of_args,a_dictionary_of_named_args)a_function(

50、*a_list_of_args,*a_dictionary_of_named_args)apply(a_function,a_list_of_args+z)a_function(*a_list_of_args+z)apply(aModule.a_function,a_list_of_args)aModule.a_function(*a_list_of_args)1.最简单的形式,可以通过在参数列表(就像a,b,c一样)前添加一个星号来调用函数。这跟Python 2 里的apply()函数是等价的。2.在 Python 2里,apply()函数实际上可以带 3 个参数:一个函数,一个参数列表,一

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 实施方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com