2015年12月2日

内包表記の話3

内包表記の可読性について考えてみます。


一般に内包表記は for文で書くよりも短い記述で済み、また動作速度も速いです。
これらは非常に大きな恩恵なのですが、他方で可読性について考慮すると、いつでも内包表記の方が良いとは限りません。

元々内包表記は、
[値 繰り返し 条件文]
というやや特殊な並びの記述です。慣れの問題が大きいのですが、Python ベッタリではない人にとってはこの表記はなかなか馴染めないようです。

それよりも、内包表記が入れ子になっていたり、記述があまりにも長い場合には、可読性の観点から内包表記を断念した方が良いようになります。
以下は読みにくい内包表記の例です。

# 九九のリストを作成。
# 内包表記が入れ子なので読みにくい
>>> qq = [[i * j for i in range(1, 10)] for j in range(1, 10)]
>>> qq
[[1, 2, 3, 4, 5, 6, 7, 8, 9],
 [2, 4, 6, 8, 10, 12, 14, 16, 18],
 ...
 [9, 18, 27, 36, 45, 54, 63, 72, 81]]

# 条件に合うファイル名を取得。
# 複数の処理が詰め込まれていて読みにくい
>>> filelist = ['img/a.jpg', 'img/b.jpeg', 'img/c.png']
>>> [os.path.basename(f) for f in filelist if os.path.isfile(f) and f.endswith(('.jpg', '.jpeg'))]
['a.jpg', 'b.jpeg']


以下の2つの条件を満たしている時のみ内包表記を書くべきだと私は考えています。あくまで私見ですが、、、。
  • 入れ子になっていないこと
  • 1行で書き切れること

0 件のコメント:

コメントを投稿