過去の日記

2020-05-11

macOS + Homgebrew + pyenvでtkinterが使えるPythonをビルドしたい [Python]

Homebrewでtcl-tkをインストールしておいて、

PYTHON_CONFIGURE_OPTS="--with-tcltk-includes='-I/usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'" pyenv install 3.7.4

などとする。

via https://github.com/pyenv/pyenv/issues/1375#issuecomment-533182043


2020-05-21

"forループが遅い"は正しくない [Python]

"forループが遅いからmapで書こう"は正しくない。
forループより「Pythonで書かれた関数(lambda含む)」の呼び出しコストの方が馬鹿にならない。

リストに入った文字列に対して、それぞれ2文字目から2文字分を切り取った文字列でリストを作ることを考える(まだ曖昧だけど本筋じゃないので許して)

seq = [''.join(str(random.randint(0, 9)) for s in range(5)) for _ in range(1_000_000)]

とかして用意しておこう。


result = list(map(lambda x: x[2:4], seq))

より、愚直なforループ

result = []
for x in seq:
    result.append(x[2:4])

の方が速い。

しかし"mapが遅い"という結論にははならない。

愚直なforループより、

result = list(map(itemgetter(slice(2, 4)), seq))

の方が速いから。(itemgetter は operatorモジュールからimportすること)

lambdaとitemgetterとの差から、"mapが遅い"のではなくて、"lamdaの呼び出し/実行が遅い"と考えるのがいいだろう。


とはいえ結局、

result = [x[2:4] for x in seq]

がさらに速いので"内包表記と(関数呼び出しを伴わない)式で書けるならそれでいい"ということで。


2020-05-31

グロリアス・ドーン [novel]

7巻読んだのが2008年10月だったので、11年半ぶりに読み進めた。10年かけてちびちび読んでいた8巻。

グロリアスドーン8 少女は粉雪に踊る
https://amzn.to/2MnMrJc

グロリアスドーン9 ぐるぐる!
https://amzn.to/2AwR1SU

グロリアスドーン10 桜舞い散る空の上、
https://amzn.to/2XRtLae

グロリアスドーン11 幾億の時を越え星を越え、
https://amzn.to/37374Ek

グロリアスドーン12 出逢いの詩は静かに広がる
https://amzn.to/3gN9XNZ


熱い展開。「これってもしや……?」と森さんのファンなら誰でも思うことが中盤でバラされる。
キャサリンはどのように子供を産んだのか?
https://amzn.to/36T064G

NOVAで読んでいるはずのものが多かった。なんとなく覚えているのも忘れているのもあり。楽しい時間だった。
自生の夢
https://amzn.to/2MpDhvY

一般書のようでもあり、学術書でもあり。
賀茂川コミュニケーション塾ービブリオバトルから人工知能まで
https://amzn.to/2MlxHL8

ノルマ的

魔法科高校の劣等生(31) 未来編
https://amzn.to/2Xqp20i

薬屋のひとりごと9
https://amzn.to/2MrqtoJ