Published On: 2014-06-10|Last Updated: 2014-06-10|Categories: Python|Tags: |

Python 2 から Python 3 に何も調べずに移行しましたが知らない記法が使われてたので変更されたと思われる syntax を調べてみました。

PEP 3102 — Keyword-Only Arguments

  • 名前付き引数でないと指定できない引数が作成できるようになりました。
    従来は def foo(*ignore, named=’message’): pass とかしましたが、def foo(*, named=’message’): pass と記述できるようになりました。

PEP 3109 — Raising Exceptions in Python 3000

  • raise の記法が整理されました。
    使用できるのは raise E だけです。raise E, V とか raise E, V, T とかは忘れてください。

PEP 344 — Exception Chaining and Embedded Tracebacks

  • raise EXCEPTION from CAUSE できるようになりました。
    except 節内で例外を連鎖して発生する際の記法です。

PEP 380 — Syntax for Delegating to a Subgenerator

  • RESULT = yield from EXPR できるようになりました。
  • generator 内で return できるようになりました。
    return EXPRESSION は raise StopIteration(EXPRESSION) と同じです。
  • generator 内で return された値は yield from の戻り値となります。
    yield from を実行すると generator が最後まで実行され、上層に yield し続けます。この間は yield from した点に制御は戻りません。RESULT には generator が return した値か、raise StopIteration(RESULT) した値が入ります。

PEP 3132 — Extended Iterable Unpacking

  • iterable なオブジェクトから変数への代入が強化されました。とにかく * が付いてれば何でもできる風味です。

PEP 3113 — Removal of Tuple Parameter Unpacking

  • 引数内で tuple を展開できなくなりました。
    lambda (a, b), c: None は SyntaxError となります。

まだ一杯あるので気づいたら書きます…

関連