鉄は熱いうちに打て
=============================

Effective Pythonで学ぶ

2017-12-02

Pythonの知識で足りないところを補完したいな〜と、たまにペラペラめくっていた Effective Python を真面目に読むことにしました。 その感想と新規発見したことを数日に分けて書こうと思います。たぶん、私のメモとなるでしょう。ちゃんと最後まで頑張りたいな。

はじめに

Effective Python は「Pythonプログラムを改良する59項目」とサブタイトルが付いていますが、 こう書いたほうがいいよね が詰まっている本です。

これを会社に入社したときにきちんと読み込んでいたら、私のコードをレビューした人の手間が大分減ったのに。と後悔しました。 過去を振り返ってもピチピチギャルには戻れないので、これから未来の為にPythonらしさ、おすすめの書き方を学んでいきます。

目次

目次は公開されているので、 Effective Python をみてください。

対象読者

本の対象としている読者は Pythonの文法は覚えたけど、どう書いていいかわからないときが結構あるなと思っている人 くらいでかなっと思います。 まず、Pythonの文法を学びたい場合は、 Python文法詳解 がわかりやすくておすすめです。

1章  Python流思考(Pythonic Thinking)

早速、はじめます。

項目 1:使っている Pythonのバージョンを知っておく

Pythonのバージョンは知っておいたほうがいいですね。

項目 2:PEP 8スタイルガイドに従う

PEP8に従ったほうがいいですね。(おい)

私は開発環境にPyCharmを利用しているので、勝手にPEP8に準拠していないと黄色い波線が出て警告されます。 もうカンマ打ったら、手が勝手に後ろに半角スペース打ったりしますね。 ちゃんと守っている方が読みやすいです。

このPEP8を忘れていました。

シーケンス (文字列, リスト, タプル) については、 空のシーケンスが False であることを利用しましょう。:

良い: if not seq:
     if seq:

悪い: if len(seq):
      if not len(seq):

結構、 len() で調べていました(汗) シーケンスが空か調べるならこんな感じですね。

somelist = []

if somelist:
    print('Not empty')
else:
    print('Empty')

somestring = ''

if somestring:
    print('Not empty')
else:
    print('Empty')

あとは大丈夫。 しかし、時々忘れるので年に1回位は振り返るのは大事ですね。 pep8-ja 1.0 ドキュメント

項目 3:bytes, str, unicodeの違いを知っておく

はい。

項目 4:複雑な式の代わりにヘルパー関数を書く

ヘルパー関数 ってなんじゃろ?と思ったんですが、「条件式が複雑になるようなら、関数を作りましょう」ということですね。

項目 5:シーケンスをどのようにスライスするか知っておく

項目 6:1つのスライスでは、 start, end, strideを使わない

スライス楽しいよね。

無理すると続かないので、こんな感じで読んでいこう。