赖勇浩(恋花蝶)的博客

坐观天下风云涌,笑拥美人言语懒。

赖勇浩ID:lanphaday
301259次访问,排名171好友121人,关注者130
网络游戏程序员,略懂python、C++;不太懂网络编程、数据库编程;不懂C语言、3D。
lanphaday的文章
原创 58 篇
翻译 14 篇
转载 12 篇
评论 562 篇
赖勇浩的公告
Google
最近评论
ark:囧.....没东西看.为了一个项目花了2天啃DIP.....第一个例子看下来的确需要毅力.不过倒是勾起了继续学Python的兴趣.本来准备用完就扔的................
lanphaday:试验一下是不是无法评论。
Joyfish:DIP是我看完 Python Tutorial 后的第二个Python教程,其实感觉还不错,可能和在这之前我有多年的C++ & Java基础有关,支持博主
ghostjava:不要人云亦云,一群跟屁虫!你看着好就是好,管别人说什么,我就是用DIP入门的,虽然我是SPSS的,没在实际中使用过python,我就觉得很棒,初学者和穷人都来用。入门后推荐看<ython核心编程>.
ideasky:此帖甚好.
文章分类
收藏
    相册
    编程语言
    TIOBE 流行度
    性能排名
    我创建的开源项目
    VisualPyTune
    我的其它博客
    程序员的小厨房
    过去的博客
    非技术博客
    友情链接
    CP(图形学)
    DarkSpy
    一刀
    丫头
    沈公,仙人也!
    超哥之奋起版
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Python 3.0 抢“鲜”体验收藏

    新一篇: C与C++之争是两小儿辩日? | 旧一篇: 跟Steve Jobs学简报[4-5](恋花蝶整理版)

    Python 3.0 抢“鲜”体验
    欢迎转载、打印、分发等,但不可用于商业用途,任何时候必须保留全文完整,并声明转载自恋花蝶的博客(http://blog.csdn.net/lanphaday),谢谢。
           2007831,Python 3000的最新版本Py3.0终于释出了第一个alpha版本。因为3.0版本与之前的2.x版本不兼容,所以Py3.0版本完全可以看作是Py的新生。此实为Python社区盛事。虽然Py3.0的final版本要到08年8月才会释出,但我们仍然可以从a1版本看到很多Py3.0的新特性,现在我们就来体验一下。
    下载与安装
           http://www.python.org/download/releases/3.0/下载。提供压缩的源代码包(50MB)和Windows安装包(10MB)。
    兼容性
           早在Py3.0释出之前,Guido就放言Py3.0不再对Py2.x兼容。现在看来,的确是这样的。
           不过,提供了一个“2To3的转换器,以便开发人员能够将Py2.x的代码转到Py3.0上来。但目前这个还没有正式的释出版本,只有SVN仓库可以CheckOut。地址在这里:http://svn.python.org/view/sandbox/trunk/2to3/
    性能
           Py3.0运行pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。
    编码
           Py3.0源码文件默认使用utf-8编码,这就使得以下代码是合法的:
    >>> 中国 = 'china'
    >>> print(中国)
    china
    语法:
    1) 去除了<>,全部改用!=。
    2) 去除``,全部改用repr()
    3) 关键词加入as和with。
    4) 整型除法返回浮点数,要得到整型结果,请使用//。
    5) 加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量。
    6) 去除print语句,加入print()函数实现相同的功能。同样的还有exec语句,已经改为exec()函数。
    7) 去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了。
    8) 新式的8进制字面量,相应地修改了oct()函数。2.x这样:
    >>> 0666
    438
    >>> oct(438)
    '0666'
    3.0这样:
    >>> 0666
    SyntaxError: invalid token (<pyshell#63>, line 1)
    >>> 0o666
    438
    >>> oct(438)
    '0o666'
    9) 增加了2进制字面量和bin()函数:
    >>> bin(438)
    '0b110110110'
    >>> _438 = '0b110110110'
    >>> _438
    '0b110110110'
    10)              扩展的可迭代解包。在Py3.0里,a, b, *rest = seq 和 *rest, a = seq都是合法的,只要求两点:rest是list对象和seq是可迭代的。
    11)              新的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>
    12)              新的metaclass语法:
    class Foo(*bases, **kwds):
           pass
    具体参阅PEP 3115 。
    13)              支持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 。
    14) raise语句的语法改变,参阅“异常”一节的第3、4条目。
    字符串和字节串
    1) Py3.0去除了unicode类型,现在字符串只有str一种类型,但它跟2.x版本的unicode几乎一样。
    2) 关于字节串,请参阅“数据类型”的第2条目。
    数据类型
    1) Py3.0去除了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替代它吧。
    面向对象
    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,编写抽象方法(属性)更加方便。
    异常
    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版本中还没有实现,这方面就不说了。
    其它:
    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()函数都被去除了。
    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.0
    >>> file
    Traceback (most recent call last):
     File "<pyshell#120>", line 1, in <module>
        file
    NameError: name 'file' is not defined
    感想
           Python 3.0版本是Python的革命性升级,废除了许多之前的特性,也引入了新特性(如大量使用迭代器的思想)。开发人员从2.x升级到3.0版本需要比较大的代价,不仅要重新训练自己已经僵化的手指,更要让脑子从以前的条条框框中跳出来。
           现在释出的只是alpha 1 版本,还有很多特性都没有实现,根据 PEP 3000的计划,到明年4月将能够实现全部新特性,到时我们将会有更强的震憾感吧?
    参考
           Python 3.0 Documentation

    发表于 @ 2007年09月04日 20:07:00|评论(loading...)|编辑

    新一篇: C与C++之争是两小儿辩日? | 旧一篇: 跟Steve Jobs学简报[4-5](恋花蝶整理版)

    评论

    #ttkk1024 发表于2007-09-05 16:09:28  IP: 218.26.251.*
    大体看过一部分,感觉比较好!但也有兼容性的问题,感觉有点象从c到c++的迁移!
    #maninred 发表于2007-09-05 16:13:16  IP: 59.33.247.*
    期待Python3000,现在才刚刚开始公布新特性。不过兼容性问题还是会让很多开发者等待和观望一段阶段的。
    2007-09-05 22:28:06作者回复
    是,我估计兼容性问题将导致Python在release final之后两年左右才会流行开来(流行的意思是大部分商业和开源软件都使用3.0版本)
    #iooyoo 发表于2007-09-05 17:29:11  IP: 219.136.15.*
    有提供源码吗?
    2007-09-05 22:26:38作者回复
    Python是开源软件啊,当然提供源码下载的了。有Gzip压缩包下载。
    #fireflyc 发表于2007-09-06 07:48:00  IP: 60.191.227.*
    研究中
    #mazhenli 发表于2007-09-06 17:41:05  IP: 221.221.235.*
    我刚开始学Python,你说我是直接学Python 3.0 用法,还是先学2.5 。
    2007-09-06 17:52:23作者回复
    学2.5吧。3.0还不成熟。等beta版出来再说也不迟。<br />而且3.0和2.5不兼容,很多使用python的产品不可能一下子转到3.0下的,所以学2.5有市场,有钱途。但3.0肯定是要去学的。
    #KuWo音乐盒 发表于2007-09-06 22:25:15  IP: 222.131.41.*
    我也是刚学、学学
    #SH 发表于2007-09-06 23:50:46  IP: 60.215.117.*
    去除``,全部改用repr()

    请教这有何意义?
    2007-09-07 00:34:42作者回复
    可读性更好。`var`很容易被认为是'var',特别是在使用小字体的时候。
    #Could 发表于2007-09-07 08:54:39  IP: 220.231.194.*
    有的改进感觉就是倒退。
    多重继承之类的特性有没有什么改变?
    #nethermit 发表于2007-09-07 09:38:37  IP: 124.243.202.*
    离实际使用还差太远,等到大量linux发行包内置py3000,才有可能大规模推广使用
    #Classicning 发表于2007-09-09 08:53:39  IP: 58.212.83.*
    嗯,Python3000离真正流行还有很长一段时间呢。现在即使是2.5Zope好像都还不支持吧,何况3000

    不过有个盼头总是好的
    #r_mosaic 发表于2007-09-10 10:01:52  IP: 211.167.159.*
    多谢您写的体会,我有空仔细拜读!
    #mgphuang 发表于2007-11-08 23:02:40  IP: 221.231.194.*
    不知道会不会像perl一样,一撅不振!
    #Semigod 发表于2007-11-27 20:04:25  IP: 219.136.10.*
    看完以后我也非常期待,感觉的确让使用中的很多问题简化了或更一致
    #jm 发表于2007-12-12 13:35:47  IP: 219.149.220.*
    3.0 不是挺好么,还叫什么3000!
    #phoenix_sy 发表于2008-03-10 14:22:26  IP: 211.137.74.*
    真是遗憾...为什么每门语言都要往高大全方向发展呢...
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 赖勇浩