发布新日志

  • 老王python

    2011-02-19 12:18:11

    亲爱的朋友:
        欢迎你!很高兴能在这里见到你,你能来到这里说明你真的很喜欢python,很想把python给学好!我觉的你很幸运,开始我学python的时候比较少资料,学起来也比较头疼,现在随着python越来越流行,资料也越来越多,大家以后学起来应该会轻松很多了。我前段时间花了很多时间整理了一些python教程,我觉的对初学python的朋友来说是个很好的引路人,我相信通过它你可以快速的上手python的。不信可以试试哦!
    最近索取资料的朋友比较多,让老王python感到欣慰!为了让更多的朋友了解python,学习python,喜欢python!
    我做出了一个艰难的决定:如果你想要得到这份资料的话:只要做下面列举的5件事情中的2件事,对你来说轻而易举!
    1. 如果你有一些python相关群的话,除我的群:跟着老王学python外,将这篇文章的链接发到群里,分享给想学python的朋友
    2. 如果你有QQ而且有微博的话,将这篇文章的链接发到在微博里面,分享给想学python的朋友
    3. 如果你有个人的技术博客的话,将这篇文章转发到你的博客里,分享给想学python的朋友
    4. 如果你有技术论坛的账户的话,把这篇文章转发到论坛的文章里,分享给想学python的朋友
    5. 如果你有QQ空间的话,把这篇文章转发到QQ空间里并且分享这篇文章,把信息分享给想学python的朋友
    如果你做了上面5件事情的2件事情,请你把做的相关链接或者信息截图整理好后通过邮箱发给我,我的邮箱是:

    280026798@qq.com

    我会把教程的地址发到你的邮箱里
    老王python 提供简单实用的python 教程。本文地址:http://www.cnpythoner.com/pythonshop  转载请保留

    先分享先学习哦!希望你不要错过这个和python亲密接触的机会!

  • Python字符串的encode与decode (转)

    2009-12-01 20:52:18

    首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

    decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。

    encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。

    在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。

    如在UliPad中运行如下代码:

    s=u"中文"
    print s

    会提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)。这是因为UliPad在英文WindowsXP上的控制台信息输出窗口是按照ascii编码输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以输出时产生了错误。

    将最后一句改为:print s.encode('gb2312')

    则能正确输出“中文”两个字。

    若最后一句改为:print s.encode('utf8')

    则输出:\xe4\xb8\xad\xe6\x96\x87,这是控制台信息输出窗口按照ascii编码输出utf8编码的字符串的结果。

     

    Updated at: 2008.11.05

    另外,代码中字符串的默认编码与代码文件本身的编码一致,如:

    s='中文'

    如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。 这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件,在这篇文章中可以看到如何获得系统的默认编码。

    如果字符串是这样定义:

    s=u'中文'

    则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。

    如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:

    isinstance(s, unicode)  #用来判断是否为unicode

  • 常用的Python库

    2009-11-26 21:12:43

    Tkinter———— Python默认的图形界面接口。
      Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。Tcl/Tk是由John Ousterhout发展的书写和图形设备。Tcl(工具命令语言)是个宏语言,用于简化shell下复杂程序的开发,Tk工具包是和Tcl一起开发的,目的是为了简化用户接口的设计过程。Tk工具包由许多不同的小部件,如一个按钮、一个滚动条等。通过Tk提供的这些小部件,我们就可快速地进行GUI开发。Perl、Scheme等语言也利用Tk库进行GUI开发。Tkinter是跨平台,在各种平台下都能使用。
      Python Imaging Library(PIL)————python提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。
      Pmw(Python megawidgets)Python超级GUI组件集————一个在python中利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。
      PyXML———— 用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:
      xmlproc: 一个符合规范的XML解析器。
      Expat: 一个快速的,非验证的XML解析器。 还有其他
      和他同级别的还有 PyHtml PySGML
      PyGame———— 用于多媒体开发和游戏软件开发的模块。
      PyOpenGL———— 模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。
      NumPy、NumArray和SAGE———— NumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的低层代码使用C来编写,所以速度的优势很明显。NumPy是Numarray的后继者,用来代替NumArray。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代 Magma, Maple, Mathematica和Matlab 这类工具。
      MySQLdb模块———— 用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。
      PyGTK ———— 用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的那个库。有了它,你完全可以自信的尝试自己制造Photoshop
      PyQt ———— 用于python的Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是 Scintillar编辑器类的Qt接口。
      PyMedia ———— 用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。
      Psyco ———— 一个Python代码加速度器,可使Python代码的执行速度提高到与编译语言一样的水平。
      Python-ldap ———— 提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。
      smtplib模块 ———— 发送电子邮件。
      ftplib模块 ———— 定义了FTP类和一些方法,用以进行客户端的ftp编程。我们可用python编写一个自己的ftp客户端程序,用于下载文件或镜像站点。如果想了解ftp协议的详细内容,请参考RFC959。
      xmpppy模块 ———— Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。
      下面这些就不详细介绍,只列出名字和功能
      adodb ———— ADO数据库连接组件
      bsddb3 ———— BerkeleyDB的连接组件
      chardet ———— 编码检测
      Cheetah ———— 构建和扩充任何种类的基于文本的内容
      cherrypy ———— 一个WEB framework
      ctypes ———— 用来调用动态链接库
      Cx-oracle ———— 连接oracle的工具
      DBUtils ———— 数据库连接池
      django ———— 一个WEB framework
      DPKT ———— raw-scoket网络编程
      docutils ———— 用来写文档的
      dpkt ———— 数据包的解包和组包
      feedparser ———— rss解析
      Kodos ———— 正则表达式调试工具
      Mechanize ———— 爬虫连接网站常用
      pefile ———— windows pe文件解析器
      py2exe ———— 用来生成windows可执行文件
      pycurl ———— URL处理工具
      pydot ———— 画图的,graphiz
      pyevent ———— Python的事件支持
      pylint ———— 培养良好的编码习惯
      Pylons ———— 又一个web framework
      pypcap ———— 抓包的
      pysqlite2 ———— SQLite的连接组件
      python-dnet ———— 控制网络安全的其他设备
      pythonwin ———— Python的Windows扩展
      pywmi ———— 省了好多折腾功夫
      reportlab ———— Python操作PDF的Libary。
      scapy ———— 网络包构建分析框架,可编程的wireshark,有兴趣的google “Silver Needle in the Skype”
      scons ———— 项目构建工具,写好了模板用起来还是很方便的
      sendpkt ———— Python发包
      setuptools ———— 一套python包管理机制
      simplejson ———— JSON的支持
      sqlalchemy ———— SQL数据库连接池
      SQLObject ———— 数据库连接池
      twisted ———— 巨无霸的网络编程框架
      winpdb ———— 自己的程序或者用别的库不太明白的时候就靠它了
      wxPython ———— GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构
  • python遍历文件夹和文件

    2009-10-31 16:58:46

    这个也许是最常用的功能,如下:
    复制代码 代码如下:
    import os
    import os.path
    rootdir = "D:\\programmer\\training"
    for parent, dirnames, filenames in os.walk(rootdir):
    #case 1:
    for dirname in dirnames:
    print "parent is:" + parent
    print "dirname is:" + dirname
    #case 2
    for filename in filenames:
    print "parent is:" + parent
    print "filename with full path :" + os.path.join(parent, filename)

    解释说明:
    1.os.walk返回一个三元组.其中dirnames是所有文件夹名字(不包含路径),filenames是所有文件的名字(不包含路径).parent表示父目录.
    2.case1 演示了如何遍历所有目录.
    3.case2 演示了如何遍历所有文件.
    4.os.path.join(dirname,filename) : 将形如"/a/b/c"和"d.java"变成/a/b/c/d.java".

    perl分割路径和文件名
    常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.
    复制代码 代码如下:
    import os.path
    spath="D:/download/flight/flighthtml.txt"
    # case 1:
    p,f=os.path.split(spath);
    print "dir is:"+p
    print "file is:"+f
    # case 2:
    drv,left=os.path.splitdrive(spath);
    print "driver is:"+drv
    print "left is:"+left
    # case 3:
    f,ext=os.path.splitext(spath);
    print "f is:"+f
    print "ext is:"+ext

    这三个函数都返回二元组.
    1.case1 分隔目录和文件名
    2.case2 分隔盘符和文件名
    3.case3 分隔文件和扩展名

     

  • python urllib2 (转)

    2009-10-31 16:53:24

    当处理HTTP链接的时候,链接如果有中文的话,那么发起HTTP链接的时候,一定要先把URL编码,否则就会出现问题。而在python中,用 urllib2.quote(URL)进入编码和urllib2.unquote(URL)解码的时候,有一点需要注意,就是URL字符串不能是 unicode编码,此时必须把URL编码转换成适当的编码,如utf-8或gb2312等而python处理编码转换的机制如下:原来编码》内部编码》目的编码 python的内部编码是使用unicode来处理的 gb=”中国”#此处为原本gb2312编码 uni=unicode(gb,’gb2312′)#把gb2312编码转换成unicode的内部编码 utf=uni.encode(’utf-8′)#把unicode编码转换成utf-8目的编码在处理wxpython文本框的时候要注意,默认的编码是unicode编码,利用urllib.quote编码时候,可以通过如下方面转换后,再进行 URL编码 URL=wxpython文本框原本的unicode编码 URL=URL.encode(’utf-8′)#把unicode编码转换成utf-8编码 URL=urllib2.quote(URL)#进入URL编码,以便HTTP链接

    对我来说,Python里面哪个模块用的最多,恐怕urllib2这个不是第一也得算前三了。先看下下面最常用的代码
    Python语言:

    import urllib2
    req = urllib2.Request("http://www.g.cn")

    res = urllib2.urlopen( req )
    html = res.read()
    res.close()

    这里可以通过urllib2进行抓取页面 。也可以直接使用urllib2.urlopen( http://www.g.cn),通过Reques对象打开的好处是,我们可以很方便的为Reques 添加HTTP 请求的头部信息。
    Python语言:
    import urllib2
    req = urllib2.Request("http://www.g.cn")
    req.add_header( "Cookie" , "aaa=bbbb" ) # 这里通过add_header方法很容易添加的请求头
    req.add_header( "Referer", "http://www.fayaa.com/code/new/" )
    res = urllib2.urlopen( req )
    html = res.read()
    res.close()

    headers 初始化为{} ,所有如果连续执行两次req.add_header( "Cookie" , "aaa=bbbb" ) , 则后面的值会把前面的覆盖掉
    class Request:
        def __init__(self, url, data=None, headers={},
                     origin_req_host=None, unverifiable=False):



    当执行 res = urllib2.urlopen( req ) 时

    _opener = None
    def urlopen(url, data=None):
        global _opener
        if _opener is None:
            _opener = build_opener()
        return _opener.open(url, data)
    _opener = build_opener() 这里_opener 是一个全局变量。第一次使用时,通过build_opener() 得到一个值,以后再次使用就是保存到这个全局变量中值。
    def build_opener(*handlers):
        """Create an opener object from a list of handlers.

        The opener will use several default handlers, including support
        for HTTP and FTP.

        If any of the handlers passed as arguments are subclasses of the
        default handlers, the default handlers will not be used.
        """
        import types
        def isclass(obj):
            return isinstance(obj, types.ClassType) or hasattr(obj, "__bases__")

        pener = OpenerDirector()
        default_classes = [ProxyHandler, UnknownHandler, HTTPHandler,
                           HTTPDefaultErrorHandler, HTTPRedirectHandler,
                           FTPHandler, FileHandler, HTTPErrorProcessor]
        if hasattr(httplib, 'HTTPS'):
            default_classes.append(HTTPSHandler)
        skip = []
        for klass in default_classes:
            for check in handlers:
                if isclass(check):
                    if issubclass(check, klass):
                        skip.append(klass)
                elif isinstance(check, klass):
                    skip.append(klass)
        for klass in skip:
            default_classes.remove(klass)

        for klass in default_classes:
            opener.add_handler(klass())

        for h in handlers:
            if isclass(h):
                h = h()
            opener.add_handler(h)
        return opener

    这里就可以看到 默认的处理程序有 ProxyHandler, 代理服务器处理 UnknownHandler, HTTPHandler, http协议的处理 HTTPDefaultErrorHandler, HTTPRedirectHandler, http的重定向处理 FTPHandler, FTP处理 FileHandler, 文件处理 HTTPErrorProcessor

    我们也可以添加自己处理程序

    cookie = cookielib.CookieJar()

    urllib2.HTTPCookieProcessor(cookie) 这个就是对cookie的处理程序
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

    添加后就可以对每次收到响应中的Set-Cookie 记录到cookie 对象中,下次发送请求的时候就可以把这些Cookies附加到请求中
    urllib2.install_opener(opener) 用我们生成的opener  替换掉urllib2中的全局变量

    比如第一次请求:

    connect: (www.google.cn, 80)
    send: 'GET /webhp?source=g_cn HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.google.cn\r\nConnection: close\r\nUser-Agent: Python-urllib/2.5\r\n\r\n'
    reply: 'HTTP/1.1 200 OK\r\n'
    header: Cache-Control: private, max-age=0
    header: Date: Sun, 21 Dec 2008 13:47:39 GMT
    header: Expires: -1
    header: Content-Type: text/html; charset=GB2312
    header: Set-Cookie: PREF=ID=5d750b6ffc3d7d04:NW=1:TM=1229867259:LM=1229867259:S=XKoaKmsjYO_-CsHE; expires=Tue, 21-Dec-2010 13:47:39 GMT; path=/; domain=.google.cn
    header: Server: gws
    header: Transfer-Encoding: chunked
    header: Connection: Close

    第二次请求中就会附加

    Cookie: PREF=ID=5d750b6ffc3d7d04:NW=1:TM=1229867259:LM=1229867259:S=XKoaKmsjYO_-CsHE等Cookie

    connect: (www.google.cn, 80)
    send: 'GET /webhp?source=g_cn HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.google.cn\r\nCookie: PREF=ID=5d750b6ffc3d7d04:NW=1:TM=1229867259:LM=1229867259:S=XKoaKmsjYO_-CsHE\r\nConnection: close\r\nUser-Agent: Python-urllib/2.5\r\n\r\n'
    reply: 'HTTP/1.1 200 OK\r\n'
    header: Cache-Control: private, max-age=0
    header: Date: Sun, 21 Dec 2008 13:47:41 GMT
    header: Expires: -1
    header: Content-Type: text/html; charset=GB2312
    header: Server: gws
    header: Transfer-Encoding: chunked
    header: Connection: Close

    如果想要在urllib中启用调试,可以用

    >>> import httplib
    >>> httplib.HTTPConnection.debuglevel = 1           
    >>> import urllib

    但是在urllib2中无效,urllib2中没有发现很好的启用方法因为,

    class AbstractHTTPHandler(BaseHandler):

        def __init__(self, debuglevel=0):
            self._debuglevel = debuglevel

    会默认把调试级别改成0

    我是这样用实现的,

    cookie = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
    urllib2.install_opener(opener)
    opener.handle_open["http"][0].set_http_debuglevel(1)
  • What's New in Python 3.0

    2009-10-13 17:33:44

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


    Common Stumbling Blocks

    本段简单的列出容易使人出错的变动。

        * print语句被print()函数取代了,可以使用关键字参数来替代老的print特殊语法。例如:
             1. Old: print "The answer is", 2*2
             2. New: print("The answer is", 2*2)
             3. Old: print x,                                      # 使用逗号结尾禁止换行
             4. New: print(x, end=" ")                     # 使用空格代替换行
             5. Old: print                                         # 输出新行
             6. New: print()                                    # 输出新行
             7. Old: print >>sys.stderr, "fatal error"
             8. New: print("fatal error", file=sys.stderr)
             9. Old: print (x, y)                               # 输出repr((x, y))
            10. New: print((x, y))                           # 不同于print(x, y)!
          你可以自定义输出项之间的分隔符:
               print("There are <", 2**32, "> possibilities!", sep="")
          输出结果是:
               There are <4294967296> possibilities!

          注意:
             1. print()函数不支持老print语句的“软空格”特性,例如,在python2.x中,print "A\n", "B"会输出"A\nB\n",而python3.0中,print("A\n", "B")会输出"A\n B\n"
             2. 学会渐渐习惯print()吧!
             3. 使用2to3源码转换工具时,所有的print语句被自动转换成print()函数调用,对大项目,这是无需争论的。
        * python3.0使用字符串(strings)和bytes代替Unicode字符串和8位字符串,这意味着几乎所有使用Unicode编码和二进制数据的代码都要改动。这个改动很不错,在2.x的世界里,无数的bug都是因为编码问题。
        * map()和filter()返回迭代器(iterators)
        * dict方法keys(),items(),values()返回视图(同样是迭代器)而不是列表(list)
        * 内建的sorted()方法和list.sort()方法不再接受表示比较函数的cmp参数,使用key参数代替。
        * 1/2返回浮点数,使用1//2能得到整数。
        * repr()函数对于long整数不再包含拖尾的L,所以不加判断的去除最后一个字符会导致去掉一个有用的数字。

    String and Bytes

        * 现在只有一种字符串:str,它的行为和实现都很像2.x的unicode串。
        * basestring超类已经去掉了,2to3工具会把每个出现的basestring替换成str。
        * PEP3137:新类型bytes,用来表示二进制数据和编码文本,str和bytes不能混合,需要时,必须进行显示的转换,转换方法是str.encode()(str->bytes)和bytes.decode()(bytes->str).
        * 在原始字符串(raw strings)中所有反斜线都按字面量解释,不再特殊处理Unicode转义字符。
        * PEP3112:bytes字面量,例如b"abc",创建bytes实例。
        * PEP3120:默认源文件编码为UTF-8
        * PEP3131:可以使用非ASCII标识符(然而,除了注释中贡献者的名字之外,标准库仍然只包含ASCII)
        * PEP3116:新的IO实现,API几乎100%向后兼容,二进制文件使用bytes代替strings
        * 去除了StringIO和cStringIO模块,取而代之的是io.StringIO或者io.BytesIO

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

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

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

        * 删除了dict.iterkeys(),dict.itervalues()和dict.iteritems()
        * dict.keys(),dict.values()和dict.items()返回dict相关数据的引用

    PEP3107:函数注解(Function Annotations)

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

    Exception Stuff

        * PEP352:异常类必须继承自BaseException,它异常结构的基类。
        * 移除了StandardError
        * Dropping sequence behavior. (slicing!) and message attribute of exception instances.
        * PEP3109:抛出异常:现在必须使用raise Exception(args)而不是原来的raise Exception, args
        * PEP3110:捕获异常,现在必须使用except Exception as identifier而不是原来的except Exception, identifier
        * PEP3134:异常链(Exception chain)。
        * 改良了一些windows不能加载模式时的异常信息,具有本地化处理。

    New Class and Metaclass Stuff

        * 移除了classic class
        * PEP3115:新的metaclass语法
        * PEP3119:抽象基类。
        * PEP3129:类包装。
        * PEP3141:数字抽象基类

    其他的语言变化

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

        * 移除了backticks(使用repr()代替)
        * 移除了<>(不等号,使用!=代替)
        * as和with变成了关键字
        * True,False和None变成了关键字
        * PEP237:long不存在了,只有int,它和原来的long一样。不再支持以L结尾的数字字面量。移除sys.maxint,因为int现在已经是无限大了
        * PEP238:int相除,返回float
        * 改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的bool值
        * 移除了__getslice__,语法a[i:j]被解释成a.__getitem__(slice(i,j))
        * PEP3102:keyword-only arguments.在函数参数列表中,出现在*args之后的命名参数只能使用"关键字参数"的形式调用
        * PEP3104:nonlocal声明。使用nonlocal可以声明一个外部变量(不是global变量)
        * PEP3111:raw_input()改名为input(),也就是说,新的input()函数从标准输入设备(sys.stdin)读取一行并返回(不包括行结束符),如果输入过早终止,该函数抛出EOFError,如果想使用老的input(),可以使用eval(input())代替。
        * xrange()改名为range(),range()现在不是产生一个列表(list),而是一个迭代器。
        * PEP3113:移除了"元组参数拆包(tuple parameter unpacking)"。这种写法已经不行了:
          def foo(a, (b, c)):...
          现在要这样写:
          def foo(a, b_c):
                b,c = b_c
        * PEP3114:next()重命名为__next__(),新的内建函数next()可以调用一个对象的__next__()方法。
        * PEP3127:新的八进制字面量,二进制字面量和bin()函数。你应该写0o666而不是0666,oct()函数也做了响应的改动。同样,0b1010等价于10,bin(10)返回"0b1010"。0666这种写法现在是错误的。
        * PEP3132:支持迭代器拆包。现在你可以这样写:
          a, b, *rest = some_seqence
          甚至象这样:
          *rest, a = stuff
          一般情况下,rest对象是list,而等号右边的对象是可迭代的
        * PEP3135:新的super()。你可以不适用任何参数调用super(),正确的参数和实例会被正确选择。如果使用参数,它的行为不变,和以前一样。
        * zip(),map(),filter()返回迭代器。
        * 移除了string.letters和它的朋友们(string.lowcase和string.uppercase),现在上场的是string.ascii_letters等
        * 移除了apply(),callable(),exefile(),file(),reduce(),reload()
        * 移除了dict.has_key()。使用in操作符进行测试
        * exec语句没有了,现在是exec()函数
        * 移除了__oct__()和__hex__()特殊方法。oct()和hex()方法使用__index__()
        * 移除了对__members__和__methods__的支持
        * nb_nonzero重命名为nb_bool,__nonzero__()重命名为__bool__()

    Optimizations

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

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

        * 移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。
        * 移除了imageop模块
        * 移除了audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块
        * 移除了bsddb模块(单独发布,可以从http://www.jcea.es/programacion/pybsddb.htm获取)
        * 移除了new模块
        * os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
        * tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是tokenize.tokenize()

    Build and C API Changes

    Python’s build process和C API的改动包括:

        * PEP3118:新的Buffer API
        * PEP3121:扩展模块的的Initialization & Finalization
        * PEP3123:使PyObject_HEAD符合标准C

    其他的改动和修复

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