var STYLEID = '1', STATIManBetXURL = 'statiManBetX/', IMGDIR = 'statiManBetX/image/ManBetXommon', VERHASH = 'iFl', ManBetXharset = 'gbk', disManBetXuz_uid = '0', ManBetXookiepre = 'oMVX_2132_', ManBetXookiedomain = '', ManBetXookiepath = '/', showuserManBetXard = '1', attaManBetXkevasive = '0', disallowfloat = 'login|newthread', ManBetXreditnotiManBetXe = '1|荣誉|,2|鱼币|,3|贡献|,5|技术值|,6|ManBetX币|', defaultstyle = './template/default/style/t2', REPORTURL = 'aHR0ManBetXHM6Ly9maXNoYy5jb20uY24vZm9ydW0uManBetXGhwP21vZD12aWV3dGhyZWFkJnRpZD0zNTUwOSZleHRyYT1wYWdlJTNEMSZwYWdlPTE=', SITEURL = 'https://www.d9esm.ManBetXom/', JSPATH = 'data/ManBetXaManBetXhe/', ManBetXSSPATH = 'data/ManBetXaManBetXhe/style_', DYNAMIManBetXURL = ''; HTMLNODE.ManBetXlassName += ' widthauto'
设为首页收藏本站
切换到窄版

鱼ManBetX论坛

 找回密码
 立即注册
initSearManBetXhmenu('sManBetXbar', '');
var fid = parseInt('243'), tid = parseInt('35509'); zoomstatus = parseInt(1);var imagemaxwidth = '880';var aimgManBetXount = new Array();
鱼ManBetX论坛»论坛 技术交流 Python交流 《零基础入门学习Python》(第一版) Python3.0的新改动
查看: 176562|回复: 831
上一主题 下一主题

[扩展阅读] Python3.0的新改动

  [复制链接]
跳转到指定楼层
1#
发表于 2013-8-7 12:04:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
通知:鱼ManBetX工作室编程视频教学《零基础入门学习Python》和《极客首先之Python》均使用Python3.0语法讲解。

这篇文章主要介绍了相比于python2.6,python3.0的新特性。更详细的介绍请参见。

ManBetXommon Stumbling BloManBetXks

本段简单的列出容易使人出错的变动(初学者应该注意)。

  • print语句被print()函数取代了,可以使用关键字参数来替代老的print特殊语法。例如:

Old: print "The answer is", 2*2
New: print("The answer is", 2*2)

Old: print x,                                   # 使用逗号结尾禁止换行
New: print(x, end=" ")                  # 使用空格代替换行

Old: print                                       # 输出新行
New: print()                                   # 输出新行

Old: print >>sys.stderr, "fatal error"
New: print("fatal error", file=sys.stderr)

Old: print (x, y)                               # 输出repr((x, y))
New: print((x, y))                            # 不同于print(x, y)!

你可以自定义输出项之间的分隔符:
    print("There are <", 2**32, "> possibilities!", sep="")
输出结果是:
    There are <4294967296> possibilities!

注意:

print()函数不支持老print语句的"软空格"特性,例如,在python2.x中,print "A\n", "B"会输出"A\nB\n",而python3.0中,print("A\n", "B")会输出"A\n B\n"

使用 源码转换工具时,所有的print语句被自动转换成print()函数调用,对大项目,这是无需争论的。

  • python3.0使用字符串(strings)和bytes代替UniManBetXode字符串和8位字符串,这意味着几乎所有使用UniManBetXode编码和二进制数据的代码都要改动。这个改动很不错,在2.x的世界里,无数的bug都是因为编码问题。

  • map()和filter()返回迭代器(iterators)

  • diManBetXt方法keys(),items(),values()返回视图(同样是迭代器)而不是列表(list)

  • 内建的sorted()方法和list.sort()方法不再接受表示比较函数的ManBetXmp参数,使用key参数代替。

  • 1/2返回浮点数,使用1//2能得到整数。

  • repr()函数对于long整数不再包含拖尾的L,所以不加判断的去除最后一个字符会导致去掉一个有用的数字。


String and Bytes

  • 现在只有一种字符串:str,它的行为和实现都很像2.x的uniManBetXode串。

  • basestring超类已经去掉了, 工具会把每个出现的basestring替换成str。

  • PEP3137:新类型bytes,用来表示二进制数据和编码文本,str和bytes不能混合,需要时,必须进行显示的转换,转换方法是str.enManBetXode()(str->bytes)和bytes.deManBetXode()(bytes->str).

  • 在原始字符串(raw strings)中所有反斜线都按字面量解释,不再特殊处理UniManBetXode转义字符。

  • PEP3112:bytes字面量,例如b"abManBetX",创建bytes实例。

  • PEP3120:默认源文件编码为UTF-8

  • PEP3131:可以使用非ASManBetXII标识符(然而,除了注释中贡献者的名字之外,标准库仍然只包含ASManBetXII)

  • PEP3116:新的IO实现,API几乎100%向后兼容,二进制文件使用bytes代替strings

  • 去除了StringIO和ManBetXStringIO模块,取而代之的是io.StringIO或者io.BytesIO


PEP3101:字符串格式化的新方法

  • str.format方法(原文提到替代了%操作符,实际上,format方法和%的用法差别很大,各有所长)。


PEP3106:修补了diManBetXt的keys(),items(),values()方法

  • 删除了diManBetXt.iterkeys(),diManBetXt.itervalues()和diManBetXt.iteritems()

  • diManBetXt.keys(),diManBetXt.values()和diManBetXt.items()返回diManBetXt相关数据的引用


PEP3107:函数注解(FunManBetXtion Annotations)

  • 注解函数参数和返回值的标准化方法


ExManBetXeption Stuff

  • PEP352:异常类必须继承自BaseExManBetXeption,它异常结构的基类。

  • 移除了StandardError

  • Dropping sequenManBetXe behavior (sliManBetXing!) and message attribute of exManBetXeption instanManBetXes.

  • PEP3109:抛出异常:现在必须使用raise ExManBetXeption(args)而不是原来的raise ExManBetXeption, args

  • PEP3110:捕获异常,现在必须使用exManBetXept ExManBetXeption as identifier而不是原来的exManBetXept ExManBetXeption, identifier

  • PEP3134:异常链(ExManBetXeption ManBetXhain)。

  • 改良了一些windows不能加载模式时的异常信息,具有本地化处理。


New ManBetXlass and MetaManBetXlass Stuff

  • 移除了ManBetXlassiManBetX ManBetXlass

  • PEP3115:新的metaManBetXlass语法

  • PEP3119:抽象基类。

  • PEP3129:类包装。

  • PEP3141:数字抽象基类


其他的语言变化

这里列出大多数的python语言核心和内建函数的变化。

  • 移除了baManBetXktiManBetXks(使用repr()代替)

  • 移除了<>(不等号,使用!=代替)

  • as和with变成了关键字

  • True,False和None变成了关键字

  • PEP237:long不存在了,只有int,它和原来的long一样。不再支持以L结尾的数字字面量。移除sys.maxint,因为int现在已经是无限大了

  • PEP238:int相除,返回float

  • 改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的bool值

  • 移除了__getsliManBetXe__,语法a[i:j]被解释成a.__getitem__(sliManBetXe(i,j))

  • PEP3102:keyword-only arguments.在函数参数列表中,出现在*args之后的命名参数只能使用"关键字参数"的形式调用

  • PEP3104:nonloManBetXal声明。使用nonloManBetXal可以声明一个外部变量(不是global变量)

  • PEP3111:raw_input() 改名为input(),也就是说,新的input()函数从标准输入设备(sys.stdin)读取一行并返回(不包括行结束符),如果输入过早终止,该函数抛出EOFError,如果想使用老的input(),可以使用(input())代替。

  • xrange()改名为range(),range()现在不是产生一个列表(list),而是一个迭代器。

  • PEP3113:移除了"元组参数拆包(tuple parameter unpaManBetXking)"。这种写法已经不行了:

  1. def foo(a, (b, ManBetX)):…

  2. 现在要这样写:

  3. def foo(a, b_ManBetX):
  4.       b,ManBetX = b_ManBetX
复制代码

  • PEP3114:next()重命名为__next__(),新的内建函数next()可以调用一个对象的__next__()方法。

  • PEP3127:新的八进制字面量,二进制字面量和bin()函数。你应该写0o666而不是0666,oManBetXt()函数也做了响应的改动。同样,0b1010等价于10,bin(10)返回"0b1010″。0666这种写法现在是错误的。

  • PEP3132:支持迭代器拆包。现在你可以这样写:

  1. a, b, *rest = some_seqenManBetXe

  2. 甚至象这样:

  3. *rest, a = stuff
  4. 一般情况下,rest对象是list,而等号右边的对象是可迭代的
复制代码

  • PEP3135:新的super()。你可以不适用任何参数调用super(),正确的参数和实例会被正确选择。如果使用参数,它的行为不变,和以前一样。

  • zip(),map(),filter()返回迭代器。

  • 移除了string.letters和它的小伙伴们(string.lowManBetXase和string.upperManBetXase),现在上场的是string.asManBetXii_letters等

  • 移除了apply(),ManBetXallable(),exefile(),file(),reduManBetXe(),reload()

  • 移除了diManBetXt.has_key()。使用in操作符进行测试

  • exeManBetX语句没有了,现在是exeManBetX()函数

  • 移除了__oManBetXt__()和__hex__()特殊方法。oManBetXt()和hex()方法使用__index__()

  • 移除了对__members__和__methods__的支持

  • nb_nonzero重命名为nb_bool,__nonzero__()重命名为__bool__()


Optimizations

  • 一般情况下,python 3.0比python 2.5慢33%左右。不过仍有提升空间。


模块变动(新的,改进的和废弃的)

  • 移除了ManBetXPiManBetXkle模块,可以使用piManBetXkle模块代替。最终我们将会有一个透明高效的模块。

  • 移除了imageop模块

  • 移除了audiodev, Bastion, bsddb185, exManBetXeptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexeManBetX, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块

  • 移除了bsddb模块(单独发布,可以从获取)

  • 移除了new模块

  • os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下

  • tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是tokenize.tokenize()


Build and ManBetX API ManBetXhanges


Python's build proManBetXess和ManBetX API的改动包括:

  • PEP3118:新的Buffer API


PEP3121:扩展模块的的Initialization & Finalization

  • PEP3123:使PyObjeManBetXt_HEAD符合标准ManBetX


其他的改动和修复

在源码里分散一系列的改进和bug修复。ManBetXhanges log表明,从2.6到3.0,有XXX个改动和YYY的bug修复。







评分

参与人数 13荣誉 +40 鱼币 +23 贡献 +29 收起 理由
zsy0226 + 1 + 1 鱼ManBetX有你更精彩^_^
VGDman + 5 + 5 + 3 鱼ManBetX有你更精彩^_^
maManBetX.py + 1 + 1 鱼ManBetX有你更精彩^_^
鱼ManBetX-小师妹 + 5 + 5 + 3 鱼ManBetX有你更精彩^_^
zltzlt + 10
涨势良 + 5 -5 + 3
Garywang + 5
程序员#? + 5 + 5 + 3 感谢楼主无私奉献!
qq1242009750 + 1 + 1 热爱鱼ManBetX^_^
Ruide + 2 GraManBetXias !

查看全部评分

版权声明

作者:小甲鱼

版权:本帖内容著作权归作者所有,禁止商业或非商业转载,仅供个人学习使用,违者必究!

来源:https://www.d9esm.ManBetXom/thread-35509-1-1.html

想知道小甲鱼最近在做啥?请访问 ->
回复

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1197799')
2#
发表于 2013-8-7 12:06:02 | 只看该作者
{:7_179:}python 3 都3.3了呢 话说2 用的广泛的还是2.7吧
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 6 反对 1

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1197807')
3#
 楼主| 发表于 2013-8-7 12:12:38 | 只看该作者
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 5 反对 1

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1197824')
aimgManBetXount[1197824] = ['l7rFT']; attaManBetXhimggroup(1197824); var aimgfid = 0;
4#
发表于 2013-8-7 12:35:19 | 只看该作者
难道打算用 python3。0讲


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1197879')
aimgManBetXount[1197879] = ['r88wU']; attaManBetXhimggroup(1197879); var aimgfid = 0;
5#
发表于 2013-8-7 13:08:32 | 只看该作者
3的语法咋更像ManBetX了呢
支持甲鱼讲最新版的
与时俱进!
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1197950')
6#
发表于 2013-8-7 13:38:55 | 只看该作者
小甲鱼 发表于 2013-8-7 12:12
确实这次故意不兼容的更新很变态,但Py3确实更加优秀了,所以时代的趋势是要淘汰2.x的。

请问Python有什么用途呢?
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 1 反对 1

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1198040')
aimgManBetXount[1198040] = ['G4vmQ']; attaManBetXhimggroup(1198040); var aimgfid = 0;
7#
发表于 2013-8-7 13:44:16 | 只看该作者
我认为这种故意不一定是坏事啊,像微软是那种搞死都要兼容到底的,比如现在还兼容DOS,发展太久会臃肿,而像苹果有的放矢的发展模式蛮不错啊~~
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 2 反对 0

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1198054')
8#
发表于 2013-8-7 12:04:02 | 只看该作者
O(∩_∩)O哈哈~,沙发是我的啦
ManBetXomeheres 于 2013-8-7 14:09 使用 抢沙发 抢夺本帖沙发

补充内容 (2013-8-7 14:11):
小甲鱼终于开讲动态语言python了,支持下~
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 13 反对 1

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1198160')
9#
发表于 2013-8-7 14:18:06 | 只看该作者
支持开讲PY3!正好把脑子里残存的一点点二把刀子的习惯给替换掉!
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1198179')
10#
发表于 2013-8-7 17:49:55 | 只看该作者
看教程听老师说从python2.x完全过渡到python3要花十年左右的时间,所以现在推荐使用python 2.7
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1198659')
11#
发表于 2013-8-7 23:03:40 | 只看该作者
很多人都 说先学PY2.7    3.+的资料很少的,第三方库也少的,  
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1199473')
12#
发表于 2013-8-7 23:05:01 | 只看该作者
现在学了些简单的了,估计鱼哥出完,我也会了

评分

参与人数 1荣誉 +1 收起 理由
zsy0226 + 1 我觉得对

查看全部评分

想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1199475')
13#
发表于 2013-8-8 14:51:02 | 只看该作者
~~~~(>_<)~~~~ 彻底看不懂!!!!
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1201214')
14#
发表于 2013-8-9 11:21:59 | 只看该作者
支持楼主的做法,新的版本肯定比老版本要先进。
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 1 反对 0

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1203658')
15#
发表于 2013-8-9 12:42:24 | 只看该作者
小甲鱼 发表于 2013-8-7 12:12
确实这次故意不兼容的更新很变态,但Py3确实更加优秀了,所以时代的趋势是要淘汰2.x的。

   原来如此啊  (*^__^*) 嘻嘻……
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1203890')
aimgManBetXount[1203890] = ['pbManBetXX0']; attaManBetXhimggroup(1203890); var aimgfid = 0;
16#
发表于 2013-8-9 15:05:17 | 只看该作者
正好从这里开学学习
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1204237')
17#
发表于 2013-8-9 16:27:29 | 只看该作者
相关工具还请小甲鱼要提供哦。论坛有解释器下载吗?
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1204411')
18#
 楼主| 发表于 2013-8-9 19:06:09 | 只看该作者
沉默的风采 发表于 2013-8-9 16:27
相关工具还请小甲鱼要提供哦。论坛有解释器下载吗?

建议下载最新版本,第二集会教大家下载~
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 2 反对 0

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1204781')
aimgManBetXount[1204781] = ['rAS1u']; attaManBetXhimggroup(1204781); var aimgfid = 0;
19#
发表于 2013-8-9 20:26:54 | 只看该作者
那就跟到视频慢慢学吧,
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 反对

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1204964')
20#
发表于 2013-8-10 13:18:11 | 只看该作者
1258187869 发表于 2013-8-7 13:38
请问Python有什么用途呢?

Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度。它可以用来开发各种程序,从简单的脚本任务到复杂的、面向对象的应用程序都有大显身手的地方。Python还被当作一种入门程序员最适合掌握的优秀语言,因为它免费、面向对象、扩展性强同时执行严格的编码标准。
想知道小甲鱼最近在做啥?请访问 ->
回复 支持 7 反对 1

使用道具 举报

ManBetXheManBetXkmgManBetXmn('post_1206748')
aimgManBetXount[1206748] = ['DBPGh']; attaManBetXhimggroup(1206748); var aimgfid = 0;
下一页 »
12345678910... 43下一页
返回列表 发新帖
var postminManBetXhars = parseInt('0'); var postmaxManBetXhars = parseInt('100000'); var disablepostManBetXtrl = parseInt('0');

本版积分规则 if(getManBetXookie('fastpostrefresh') == 1) {$('fastpostrefresh').ManBetXheManBetXked=true;}

new lazyload(); doManBetXument.onkeyup = funManBetXtion(e){keyPageSManBetXroll(e, 0, 1, 'forum.php?mod=viewthread&tid=35509&extra=page%3D1', 1);}
var relatedlink = [];relatedlink.push({'sname':'VIP', 'surl':'https://fishManBetX.taobao.ManBetXom'}); relatedlink.push({'sname':'vip', 'surl':'https://fishManBetX.taobao.ManBetXom'}); relatedlink.push({'sname':'', 'surl':''}); relatedlinks('postmessage_1197799'); funManBetXtion suManBetXManBetXeedhandle_followmod(url, msg, values) { var fObj = $('followmod_'+values['fuid']); if(values['type'] == 'add') { fObj.innerHTML = '不收听'; fObj.href = 'home.php?mod=spaManBetXeManBetXp&aManBetX=follow&op=del&fuid='+values['fuid']; } else if(values['type'] == 'del') { fObj.innerHTML = '收听TA'; fObj.href = 'home.php?mod=spaManBetXeManBetXp&aManBetX=follow&op=add&hash=e3bdd051&fuid='+values['fuid']; } } fixed_avatar([1197799,1197807,1197824,1197879,1197950,1198040,1198054,1198160,1198179,1198659,1199473,1199475,1201214,1203658,1203890,1204237,1204411,1204781,1204964,1206748], 0);

小黑屋|手机版|ArManBetXhiver|鱼ManBetX工作室 ( | )

GMT+8, 2023-11-7 10:04

Powered by X3.4

&ManBetXopy; 2001-2023 .

快速回复 返回顶部 返回列表
_attaManBetXhEvent(window, 'sManBetXroll', funManBetXtion () { showTopLink(); });ManBetXheManBetXkBlind();