Pythonを学習にするにあたり公式のチュートリアルをやってみた

[Python チュートリアル](https://docs.python.org/ja/3/tutorial/)

`Python`の公式ドキュメントには上記のチュートリアルがあります。

いままで`Python`は必要に応じてたまにさわっており、なんとなくで利用していたので一度このチュートリアルをやってみたのでメモ。

## ドキュメント

[Python チュートリアル](https://docs.python.org/ja/3/tutorial/)

## チュートリアル

色々と細かくなってしまうので、それぞれの大項目について簡単に感想を書いていきます。

### 1. やる気を高めよう

初見でつまづきがち？　な、実行文のグループ化がインデントでされている事が書いてあったり。豊富なライブラリが使えたり、C,C++との関係も記載があるが分量がおおい。

### 2. Python インタプリタを使う

記事の冒頭がLinuxなので面を食らうが、読んでいくとWindowsの記述があって安心する。

そもそもインタプリタやら色々な説明がないので、プログラミング入門といった体ではなさそうな事に気がつく。

### 3. 形式ばらない Python の紹介

非常にもりだくさんな章。

Pythonを書く上での入門みたいなかんじだが、あきらかに多言語をさわっとないと理解するのはつらいと思います。

- コメントの書き方がわかる
- 四則演算演算子と切り捨て除算と剰余できることがわかる。
- マイナス時の切り捨て除算だったり細かいも記載されている
- 冪乗や代入
- 数値の型変換についてもかいてある
- インタプリタでの`_`の話がでてくる
- 複素数もでてくる
- 文字列がわかる
- 対話的インタプリタの文字列出力のときの囲（" '）の違いがわある
- 特殊文字自体のエスケープ方法についてわかる
- 複数行の書き方がわかる
- リテラル同士の連結についてわかる
- 文字列のインデックス　マイナスもあるよ
- スライスの使い方がわかる
- 複数同時の代入がわかる
- 条件演算子がわかる

### 4. その他の制御フローツール

内容がプログラムらしくなってくるが、プロパティがいきなり出てきて知らないと戸惑う。

- range関数
- forのelseがあるよ
- passがでてくるよ
- matach文は話がとんでるよ
- 関数がわかる
- ドキュメント文字列
- シンボルテーブル
- 関数の引数は値渡し
- 関数はreturnがなければnoneを返すよ
- 引数についてわかるよ
- 関数の引数の呼び方を制限
- pythonの関数は引数の指定方法がpositionとキーワードができるよ
- 呼び出された方も制限できるよ
- 組み合わせ色々できるよ　難しい！
- 関数のアノテーション
- コーディングスタイルについて

### 5. データ構造

タプル、リスト、辞書型についてもう少し前提となる所からやって欲しい気もするが。
そういったテクニックがあることを知れるので有用ではありました。

4章に比べるとだいぶとっつきやすさはあります。

### 6. モジュール

`Python`でのモジュールの取り扱いについて理解できます。
`Python`ではこうなの方法をとるといった感じ。

### 7. 入力と出力

フォーマット済み文字列リテラル　など文字列操作のテクニックが何パターンも記載されており学びが大きいです。

またファイルのIOについてもしっかりと記載されており、ファイル操作もこちらの記事を読むことで理解できるかと思います。

この章は`Python`を書くにあたって、知ってれば便利さに直結しそうな部分が多くありそうです。

### 8. エラーと例外

`Python`ではこうするといった事がわかりますが、そもそもエラーハンドリングについての前提知識がないとだいぶつらい気がします。

読んでいると、こういう動きでは便利そうと感じる方法が紹介されているので一度目を通すのがよさそうです。

### 9. クラス

スコープや名前空間、クラスと属性、メソッド、インスタンス変数。
継承、多重継承、プライベート変数に関する慣習、イテレーター、ジェネレーターなどなど。

この章だけでいろいろ盛りだくさんです。

何かしらの言語でオブジェクト指向を使ったことがあれば、とくにひっかかる部分なく進めるかと思いますが。

その前提がなく、いきなりこれを始めるのはだいぶ難しいかと厳しいかと思います。

### 10. 標準ライブラリミニツアー

`Python`標準ライブラリについて紹介されており、いくつかのモジュールの使い方を簡単に紹介しています。

`Python`では標準ライブラリだけでも幅広く用意されているのが理解できます。

### 11. 標準ライブラリミニツアー --- その 2

同上

### 12. 仮想環境とパッケージ

`venv`を利用した仮想環境の管理と、`pip`を利用したバージョン管理について記述されています。

仮想環境がなぜ必要なのかと、`pip`を利用したモジュールのインストールとアンインストールの方法がわかります。

入門編といった内容となりました。

### 13. さあ何を？

`Python`の参考になる情報へのリンク。
`PyPI`って以前は`Cheese Shop`って名称だったんですね。

ここはあっさり。

### 14. 対話入力編集と履歴置換

`Python`インタプリタの対話入力では、タブ保管か入力履歴が使える事が記載されていますが、`Windows`の`Python 3.10`をここまで利用していて、タブ保管が利用できた覚えがなかったので調べてました。

[There's no readline module on Windows Python (cmd.Cmd)](https://bugs.python.org/issue45870)
[github - There's no readline module on Windows Python (cmd.Cmd) #90028](https://github.com/python/cpython/issues/90028)

Windowsだと[readline — GNU readline interface](https://docs.python.org/3/library/readline.html)が使えず、Windowsでは標準機能としてここらへんの入力補完がつかえないようです。

WSL2をつかったり、別途モジュールなどを入れれば入力補完は使えますが、標準状態のままでWindowsでは入力補完が使えないのは残念な気はします。

### 15. 浮動小数点演算、その問題と制限

浮動小数点演算について記載されており、数値計算するときには理解しておかないと誤差でマズイ事になります。

チュートリアルでここらへんちゃんと記載があるって親切ですよね。

### 16. 付録

エラー処理、`Python`スクリプトの実行（`shebang`とWindowsの場合が簡単ですが紹介されている）。

また対話モード時の起動時実行ファイルと`Python`をカスタマイズするための`sitecustomize` と `usercustomize`が紹介されています。

`sitecustomize`と`usercustomize.py`はPython起動時の実行されるので、カスタマイズしたい初期処理を入れることで、自分が使いやすいように環境を設定できます。

## 余談　いくつかのさんぷるはそのままインタプリタにはコピペしても動かない

スコープと名前空間のサンプルだったり、いくつかのサンプルをそのままインタプリタにコピペしようとすると空行が邪魔になってエラーになるので、ちょっと注意が必要です。

例としてはスコープと名前空間のサンプルでは下記のように記載されていますが、こちらインタプリタにそのままコピペすると空行で途切れてエラーになります。

```py:スコープと名前空間のサンプル
# このままインタプリタにコピペすると空行で途切れてエラーになります
def scope_test():
    def do_local():
        spam = "local spam"

    def do_nonlocal():
        nonlocal spam
        spam = "nonlocal spam"

    def do_global():
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam)

scope_test()
print("In global scope:", spam)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/870e2870-406b-ae92-c4a5-6adb6ec86645.png)

インタプリタ上で試したい場合は適宜、空行を調整して入力する必要があります。

## 総評

やってみてわかりましたが、かなりボリュームがあり全部読んでいくと結構時間がかかります。
時間はかかりますが、その分得られるものも大きいと個人的には感じました。

ただしこちらのチュートリアルは`Python`以外の言語を何かしら利用したことがある人を前提としている気がします。

プログラミング言語自体をさわるのがはじめてみたいな方は、2章（Python インタプリタを使う）とか3章（形式ばらない Python の紹介）でハードルが高くていきりなり挫折しそう。

だいたいの項目について、読みながら他言語のあれが、`Python`ではこういった感じなどイメージを持ちながら読み勧めていたので、プログラム初心者にとってはつらいけど、多言語をさわっていれば非常に有用なチュートリアルだと個人的に感じました。

ちなみに`Python`を学習するにあたっては、[デザインと歴史 FAQ](https://docs.python.org/ja/3.10/faq/design.html#id3)　を読むと、`Python`の色々な部分が腹に落ちた感じがしたので、こちらも読むのをおすすめします。