周回遅れでIT業界デビューしたエンジニアのブログ

就職氷河期にモロにぶち当たり、人生で混迷を極めた末にIT業界に安寧を見出そうとしているアラフォーのお勉強日記です。

Pythonの基礎固め。それでも「初めてのPython」を選んだ理由

私の勉強時間はおもに2つ。朝の朝食前と、会社の昼休みです。

  • 朝はCouseraやUdacityのビデオ講義のような、比較的重たいもの
  • 昼休みはテキストのような、比較的軽いもの

という分け方をしていて、今のところ昼休みはPythonのおさらいをしています。

※11/24追記:完了しました。
※11/28追記:各章で実際に書いたコードをGitHubにアップしました。

どうしてPythonのおさらい?

いま参画しているプロジェクトではPythonを使っています。しかし、Javaと違って勉強が十分でないままにコーディングに入ってしまったので、いわゆる「Pythonを理解し特長を活かしたコーディング」が出来ているとは思っていません。

Pythonは書いていて面白いしこれからもずっと使っていきたいので、「Javaと何が違うのか」「Pythonで特徴的なことは何なのか」などを、ちゃんと把握した上でないとこの先厳しいだろうと考えました。(当たり前!)

オライリー本登場

で、選んだ本がこちら。

初めてのPython 第3版

初めてのPython 第3版

英語では第5版まで出版されておりPython3なのですが、日本語では第3版止まりなのでPython2です。
当然、Python3では使えない関数があったり、一部ステートメントが関数になっていたりと本の内容と現状とが合っていない部分もあり、「入門Python3」なども出ている中、どうしてわざわざこれを選んだのかというと……

  • Pythonの基本的なところは同じ
  • クラス(インスタンスのself含む)、__radd__のような演算子オーバーロードのメソッド、例外処理など、「入門Python3」では説明が薄い部分をちゃんとカバーしている
  • 同時期に受講しているUdacityの「Intro to Machine Learning」がPython2
  • っていうか読みながらPython3で書けばいいじゃない。2との違いも理解できるし

こんな理由からです。特に2番目は重要で、本屋で何度も数冊読み比べて内容を吟味した上での判断なので、Pythonを開発言語として使いたいなら読んでおいたほうがいいと感じました。私はこの本の内容に満足しています。

クラス

例えばこんなクラス。継承関係があったりメソッドを上書きしたり。(p.526より抜粋)

class Super:
    def method(self):
        print('in Super.method')
    def delegate(self):
        self.action()

class Inheritor(Super):
    pass

class Replacer(Super):
    def method(self):
        print('in Replacer.method')

class Extender(Super):
    def method(self):
        print('starting Extender.method')
        Super.method(self)
        print('ending Extender.method')

class Provider(Super):
    def action(self):
        print('ending Extender.method')

class Provider(Super):
    def action(self):
        print('ending Extender.method')

if __name__ == '__main__':
    for klass in (Inheritor, Replacer, Extender):
        print('\n' + klass.__name__ + '...')
        klass().method()

    print('\nProvider...')
    x = Provider()
    x.delegate()

演算子オーバーロード用のメソッド

Pythonで特徴的なもののうち、これらの「前後にアンダーバー2つ」がそれに該当すると思います。網羅的に解説してくれている本は少ないのでは。(p.530より)

メソッド 対応する演算子、処理 メソッドを起動するコードの例
__init__ インスタンスの作成 X = Class()
__del__ ガベージコレクション
__add__ 演算子 X + Y、X += Y
__or__ 演算子(ビット論理和 X | Y、X |= Y
__repr__、__str__ 出力、型変換 print(X)、repr(X)、str(X)
__call__ 関数の呼び出し X()
__getattr__ .を使用した属性へのアクセス X.undefined
__setattr__ 属性への値の代入 X.any = value

……などなど。これらについて一つ一つ、コード実例つきで解説してくれます。親切!

例外処理

try:
    # コード実行
except:
    # 例外処理
else:
    # 例外処理なし

例外処理がなかった場合の処理をtry文に入れたり。(p.636より)

「初めてのPython」を卒業した後は?

興味によって次のステップの本は変わってくると思うのですけれど、私はこの辺りをリストアップしています。

Fluent Python ―Pythonicな思考とコーディング手法

Fluent Python ―Pythonicな思考とコーディング手法

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

ゼロからはじめるデータサイエンス ―Pythonで学ぶ基本と実践

ゼロからはじめるデータサイエンス ―Pythonで学ぶ基本と実践

あとは、電子書籍のみの刊行となっている「仕事ではじめる機械学習」です。
www.oreilly.co.jp

全部手を動かして読破したい。

でも……

やはり、Python3バージョンの日本語版が欲しいですよね。英語版の第5版は1500ページくらいあるらしいので訳すのもかなり大変そうですけれど、是非お願いします!!