Pythonの基礎固め。それでも「初めてのPython」を選んだ理由
私の勉強時間はおもに2つ。朝の朝食前と、会社の昼休みです。
- 朝はCouseraやUdacityのビデオ講義のような、比較的重たいもの
- 昼休みはテキストのような、比較的軽いもの
という分け方をしていて、今のところ昼休みはPythonのおさらいをしています。
※11/24追記:完了しました。
※11/28追記:各章で実際に書いたコードをGitHubにアップしました。
どうしてPythonのおさらい?
いま参画しているプロジェクトではPythonを使っています。しかし、Javaと違って勉強が十分でないままにコーディングに入ってしまったので、いわゆる「Pythonを理解し特長を活かしたコーディング」が出来ているとは思っていません。
Pythonは書いていて面白いしこれからもずっと使っていきたいので、「Javaと何が違うのか」「Pythonで特徴的なことは何なのか」などを、ちゃんと把握した上でないとこの先厳しいだろうと考えました。(当たり前!)
オライリー本登場
で、選んだ本がこちら。
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 12人 クリック: 423回
- この商品を含むブログ (133件) を見る
英語では第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な思考とコーディング手法
- 作者: Luciano Ramalho,豊沢聡,桑井博之,梶原玲子
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/10/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/12/26
- メディア: 大型本
- この商品を含むブログ (19件) を見る
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
ゼロからはじめるデータサイエンス ―Pythonで学ぶ基本と実践
- 作者: Joel Grus,菊池彰
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/01/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
あとは、電子書籍のみの刊行となっている「仕事ではじめる機械学習」です。
www.oreilly.co.jp
全部手を動かして読破したい。
でも……
やはり、Python3バージョンの日本語版が欲しいですよね。英語版の第5版は1500ページくらいあるらしいので訳すのもかなり大変そうですけれど、是非お願いします!!