3.0a1の新機能 (1)
以下を基にしたまとめ。
- Python Documentation: What's New in Python 3.0 (http://docs.python.org/dev/3.0/whatsnew/3.0.html)
print関数
printが文から関数になった。()を付けないとSyntaxErrorが発生。詳細は、PEP 3105を参照。
print(value, ..., file=None, sep=' ', end='\n') # シグネチャ print('a', 'b') # "a b"を出力して改行する print('a', end=' ') # "a "を出力。改行しない print() # 改行を出力 print("a", file=sys.stderr) # sys.stderrに出力 print((x, y)) # repr(x, y)を表示。 print('1', '+', '2', '=', '3', sep='') # "1+2=3"を出力
フォーマット指定
フォーマット指定は、文字列クラスのformatメソッドもしくは、グローバル関数formatで指定できるようになった。詳細は、PEP 3101を参照。
'{0}, {1}, and {c}'.format('a', 'b', c='c') # "a, b, and c"となる print(format(10.0, '7.3g') # " 10"となる ':-{{}}'.format() # ブレースは2つ重ねることによりエスケープ。":-{}"となる '{0[a]}, {0[b]} and {0[c]}'.format(dict(a='1', b='2', c='3')) # 辞書も使える。"1, 2 and 3"となる 'My name is {0:8}'.format('Fred') # フォーマット指定子を:に続けて指定できる。指定子の意味はオブジェクトの型ごとに異なる。この場合"My name is Fred "となる '{0:{1}}'.format(a, b) # フォーマット指定子の位置にパラメータを使える
抽象クラス
abc(Abstract Base Class)モジュールのABCMetaメタクラスを使用する。抽象クラスのメソッドは、super().foo()などのように呼び出す。詳細は、PEP 3119を参照。
from abc import * class Foo(metaclass=ABCMeta): @abstractmethod def foo(self): print(’foo() in Foo’) class Bar(Foo): def foo(self): super().foo() print(’foo() in Bar’) class Baz(Foo): def foo(self): print(’foo() in Baz’) for b in [Bar(), Baz()]: b.foo() # 出力 foo() in Foo foo() in Bar foo() in Baz
Function Annotations
型に対する制限を付けられるものと思っていたが、よく読んだら単なる注釈で文法的意味はないらしい。詳細は、PEP 3107を参照。
>>> def foo(a: 'x', b: 5+6, c: list) -> max(2, 9): ... pass ... >>> foo.__annotations__ {'a': 'x', 'c': <type 'list'>, 'b': 11, 'return': 9} # Annotationが取り出せる