kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Python の理解度確認をするために「Python チュートリアル 第3版」を読んだ

オライリーから出版されている「Python チュートリアル 第3版」を読んだ.読者対象として「Python 入門者のための」と書いてあるけど,そこそこ難しい内容もあり,中級者でも楽しめる内容になっている.本書の最初に載っている「訳者まえがき」にも,理解度によって読む方法を変えて良いと書いてあった.今回本書を読んでみて,勉強になった部分を整理しておこうと思う.なお,本書は「Python 3.5.1」をサポートしている.さらに付録もあり,特に「付録E」「付録F」は面白かった.

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版

目次

  • 1章 : 食欲をそそってみようか
  • 2章 : Pythonインタープリタの使い方
  • 3章 : 気楽な入門編
  • 4章 : 制御構造ツール
  • 5章 : データ構造
  • 6章 : モジュール
  • 7章 : 入出力
  • 8章 : エラーと例外
  • 9章 : クラス
  • 10章 : 標準ライブラリめぐり
  • 11章 : 標準ライブラリめぐり - PartII
  • 12章 : 仮想環境とパッケージ
  • 13章 : 次はなに?
  • 14章 : 対話環境での入力行編集とヒストリ置換
  • 15章 : 浮動小数点(float)の演算:その問題と限界
  • 16章 : 補遺
  • 付録A : 用語
  • 付録B : Python のドキュメント群について
  • 付録C : 歴史とライセンス
  • 付録D : コピーライト
  • 付録E : Python初心者だった頃─みんながひっかかるPythonのヘンなとこ
  • 付録F : Python 2を読んだり書いたりせざるを得ない人へ

python -i オプション

2章「Pythonインタープリタの使い方」の中で,コマンドラインから python -i で実行すると,実行後にインタラクティブモードに入るという内容があり,今まで使ったことがなかった.サクッとデバッグをするときなどに使えそう.例えば,以下のように変数を宣言するコード name.py を用意する.

name = 'kakakakakku'

次に python -i で実行すると,そのままインタラクティブモードになり,変数を確認することができる.

$ python -i name.py
>>> name
'kakakakakku'
>>> quit()

docs.python.jp

ビルトイン変数 _(アンダースコア)

3章「気楽な入門編」では,データ型の紹介がメインだけど,インタラクティブモードの紹介もある.最後に表示した式はビルトイン変数 _(アンダースコア)に代入される.覚えておくと,使える場面もありそう.

$ ipython
In [1]: 100 * 5
Out[1]: 500

In [2]: _
Out[2]: 500

ただし,ローカル変数としても設定できてしまうため,結果としてビルトイン変数を隠蔽することに繋がってしまう.気を付けよう.

$ ipython
In [1]: _ = 1000

In [2]: 100 * 5
Out[2]: 500

In [3]: _
Out[3]: 1000

PEP 8 : Style Guide for Python Code

4章「制御構造ツール」の最後にコーディングスタイルとして「PEP 8 : Style Guide for Python Code」の紹介も載っていた.「PEP 8」だと,インデントはタブではなく,4スペースが推奨されている.

www.python.org

リスト内包

5章「データ構造」は基本的なデータ構造の解説だった.リストを生成するときに「リスト内包」が使えることは覚えておくと良さそう.単純に for を複数書けるだけではなく,if で条件を設定することもできる.とは言え,可読性とトレードオフになる可能性があるので,メリットがある場合に使う.

$ ipython
In [4]: [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
Out[4]: [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

docs.python.jp

標準ライブラリ

11章「標準ライブラリめぐり - PartII」では,以下のライブラリなどが紹介されていた.

  • reprlib.repr()
  • textwrap.fill()
  • locale.format()
  • struct.unpack()
  • threading.Thread
  • logging
  • weakref.WeakValueDictionary()
  • collections.deque
  • bisect.insort()

weakref など,今まで使ったことがない標準ライブラリもあり勉強になった.collections.deque に関しては既にまとめてある.

kakakakakku.hatenablog.com

pyvenvvenv

12章「仮想環境とパッケージ」では,pyvenvpip の紹介がある.本書は「Python 3.5.1」をサポートしているが,「Python 3.6」pyvenv は非推奨になり,現在は venv が推奨になっているので,注意が必要かも.

The pyvenv script has been deprecated as of Python 3.6 in favor of using python3 -m venv to help prevent any potential confusion as to which Python interpreter a virtual environment will be based on.

docs.python.org

実は本書はウェブでも公開されていて,既に「Python 3.6.5」をサポートしている.最新版を読むと venv 前提で書かれている.量が多いため,個人的にはウェブよりも本の方が読みやすかった.

docs.python.jp

リンク集

13章「次はなに?」はリンク集になっている.Python を勉強するときに参考にすると良さそう.

正誤表

非常に多くの誤植があるので,読むときは正誤表も合わせて確認する.実は正誤表に載っていない誤植を1箇所発見していて,xiv にある 5.1.4 は「れ子」ではなく「入れ子」になるべき.

www.oreilly.co.jp

まとめ

  • 「Python チュートリアル 第3版」を読んだ
  • 「Python 入門者のための」と書いてあるけど,そこそこ難しい内容もあり,中級者でも楽しめる
  • 気になるライブラリなどは IPython や Jupyter Notebook を使って試そう!

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版