Python 2.6 リリースノート

Python 2.6 の What's New が面白かったので自分用にメモ。

==========
Python 2.6
==========

気になった変更点とか、
適当に書いてるので嘘書いてるかもしれません。

* ドキュメントが reStructuredText + Sphinx になった

* functools.reduce() が出来た、これは今までの reduce() と一緒

* with が __future__ しなくても良くなった(正式採用)

  まだあまり使ったこと無いのですが下記の使い方が多そう
  ::

    with open('/spam/egg', 'r') as f:
      for line in f:
        print line

* __package__ 属性が追加された模様。

* site-packages の場所が大きく変わる模様。 Mac は ~/.local/ になるみたい、これはいい感じ。

* multiprocessing GIL(ぐろーばるいんたぷりたーろっく)回避。ちなみに 2.5 や 2.4 でもパッケージインストールすれば使えます。http://pypi.python.org/pypi/processing

  Queue とか Process とか Pool とか楽しいのばかりなので是非触りましょう。

* 拡張文字列フォーマット採用、なんかこれすごく分かりにくい ... 。簡単なテンプレートエンジンみたいなものと認識すればいいのかなぁ。

  ::

    >>> '{0:g}.format(3.75)

  それにともない __format__ というのもできましたとさ。
  ::

    >>> format(10.0001, '.2f')
    '10.00'

  print が print() になる。これは __future__ しないと出来ません。
  ::

    from __future__ import print_function
    print('spam!spam!spam!')

  * 早いうちに慣れておいた方がいいので積極的に使っていくべき。print は無くなる ... のかな?

* 例外ハンドラの書き方がちょこっと変わります。

  ::

    try:
      ...
    except (TypeError, ValueError):
      ...

  * つまりタプルにしようね。ということですな、もともとこの書き方だったので困らないな。

* バイトリテラル。これはなんかいい感じ。これも __future__ です。

  コピペしてきた::

    from __future__ import unicode_literals
    s = ('\u751f\u3080\u304e\u3000\u751f\u3054'
         '\u3081\u3000\u751f\u305f\u307e\u3054')
    # 12 Unicode characters
    print len(s)

  bytearray というのが出来てて ord をわざわざしなくて良くなった。 b'' がいいな。 
  コピペしてきた::

    >>> bytearray([65, 66, 67])
    bytearray(b'ABC')
    >>> b = bytearray(u'\u21ef\u3244', 'utf-8')
    >>> b
    bytearray(b'\xe2\x87\xaf\xe3\x89\x84')
    >>> b[0] = '\xe3'
    >>> b
    bytearray(b'\xe3\x87\xaf\xe3\x89\x84')
    >>> unicode(str(b), 'utf-8')
    u'\u31ef \u3244'

    >>> b = bytearray('ABC')
    >>> b.append('d')
    >>> b.append(ord('e'))
    >>> b
    bytearray(b'ABCde')
    
  シンプルだし使いやすいし、これはいいかも。byte 列の扱いが楽になりました。

* New I/O ライブラリが追加されるらしいですが、そのうち。なんか今はいいや。

* 抽象クラスが採用されます。

  ::

    from abc import ABCMeta, abstractmethod

  __metaclass__ = ABCMeta とすることで @abstractmethod が使えるようになり、
  オーバーライド必須になる ... ということかな。

  オーバライドしないとこんなエラーが出る模様::

    TypeError: Can't instantiate abstract class Spam with abstract methods draw
 
* 便利な bin() が追加されました。

  ::

    >>> bin(173)
    '0b10101101'
    
* クラスに対するデコレータが搭載されました。

  デコレータ::

    @spam
    @eggs
    Class Bacon:
      pass 

  使わない場合::

    class A:
      pass

    A = spam(bar(A))

* tuple に index と count がつきました。

* property は昔から有りましたがそれに、getter 、 setter 、 deleter がつきました。これは付ける機能の予感。

  コピペしてきた::

    class C(object):
        @property
        def x(self):
            return self._x

        @x.setter
        def x(self, value):
            self._x = value

        @x.deleter
        def x(self):
            del self._x

    class D(C):
        @C.x.getter
        def x(self):
            return self._x * 2

        @x.setter
        def x(self, value):
            self._x = value / 2
      
* md5 から hashlib へ切り替えましょう import md5 なくなるよ。

* urllib2.urlopen() に timeout が付いた!!!

  これはいいものだ::

    >>> u = urllib2.urlopen("http://www.google.com", timeout=3)
    Traceback (most recent call last):
    ...
    urllib2.URLError: <urlopen error timed out>
    >>>

* simplejson が標準で搭載されます。bob たんぐっじょぶ。 import json になるので要注意。

* plistlib というマニアックな ... Mac OS X の基本設定ファイル形式ですな。それが読めるようになったとか。書き出せるようになったとか。