開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のIV部(関数)17章(関数に関連する高度なテクニック)練習問題を解いてみる。
1.
リスト内包表記の角括弧を丸括弧に帰ると、リスト内包表記はジェネレータ式になる。
リスト内包表記は最初にリスト全体が生成されてメモリに格納されるのに対し、ジェネレータ式は1度に全体が作成されるのではなく呼び出しの都度1つずつオブジェクトが生成されるので、メモリの節約に繋がる。ただ、リスト内包表記の方が実行速度が速い場合もある。
2.
ジェネレータはイテレータプロトコルをサポートするオブジェクト。
3.
関数がジェネレータ関数ならば、return文ではなくyeild文がある(return文はない場合もあるけど、ジェネレータ関数のyeild文は必ずある。)のでそれで見分けることが出来る。
4.
yieldステートメントは、関数が呼び出し側に値を渡す際、処理を終了するのではなく、処理を一時停止してステート情報を保持するという役割がある。
5.
map関数は各要素に関数を適用するのに対し、リスト内包表記は各要素にあらゆる式を適用することが出来る。
6.
lambdaは式なのでdefステートメントと違い、ステートメントが使えない(例えば上記と胃5のリスト内包表記)箇所で使えたりする。
0 コメント:
コメントを投稿