旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

Pythonクックブックを読んでいる(4)

2009年3月1日

<< 前回 |
次回 >>

1日に2章も読んでやったぜ!! と思ってたら、日が(ついでに月も)変わってた畜生

【4章 ショートカット】

1. リスト内包表記に条件文を足せるのを忘れてた

>>> [i for i in range(0,5) if i % 2 == 0]
[0, 2, 4]

「あー、リスト内包表記に条件が付けられればいいなぁ!」とか、素で考えてた・・・。

・・・と、それはさておき、以下は本に書いてあった言葉なんすが
「リストにループを掛けたいだけであれば、内包を使うべきではない。
 ループがしたいならループを書くことだ。」
うーん、いいこと言うなぁー。

2. map

>>> def foo(x):
...     return x * x
...
>>> map(foo, range(0, 5))
[0, 1, 4, 9, 16]

こんなのもあったのか・・・てか、想像付くだろうよ

3. dict.setdefault
dict.getの代入版みたいなもの

4. dictのキーをキーワード引数で足す

>>> dict({'a':1, 'b':2}, c=3, d=4)
{'a': 1, 'c': 3, 'b': 2, 'd': 4}

5. dictのキーにintが使える

>>> d = {'a':1, 22:'b'}
>>> d
{'a': 1, 22: 'b'}
>>> d[22]
'b'

int以外も使えるのかもだけど未確認
使いどころは不明

6. (key, value)でdictを生成

>>> dict([['a', 1], ['b', 2]])
{'a': 1, 'b': 2}

7. dictのキーをクラスの属性に変える
d[‘foo’]は書くのが面倒でしょ? だったらこうするといいよ!
・・・という話らしい。

class Bunch(object):
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
b = Bunch(foo=123, bar="BAR!", baz=[1, 2, 3])
print b.foo
print b.bar
print b.baz

多分、こういう風に使うことは無いとは思うが、__dict__の理解には役立った。

以上っす。

Pythonは急遽やることになったため、
「とりあえず、期日までに動くものを!」という感じで、本当に単純な記法に絞って勉強してた。
・・・んだったなぁ、というのを思い出させていただいた章でした。