Python3のテキストができました.
Python3のテキスト(ミラーサイト)
無料で差し上げますので,意見や感想をくださいませ.
→ katsu_wm%mukogawa-u.ac.jp (’%’を’@’に変えるとメールアドレスになります)
ページ末尾のコメント入力欄(非公開形式)も使えます.(名前,メールアドレスなどは無しで大丈夫です)
公開されている情報が豊富なPythonですが,アプリづくりのための一通りの入門ができる書籍などが見当たらない上,Kivyの日本語の情報も少ないのでテキストを自前で作ることにしました.
特に,既に別の言語を習得している人が,手っ取り早くPythonに取り掛かるのに役立つと考えています.
Pythonには有用なライブラリ(モジュール)がたくさん公開されているので,いろんなモジュールの使い方を簡単に説明した「ライブラリブック」みたいな本も書いています.(ミラーサイト)
ライブラリブックは現在:
OpenCV,Pillow,pygame,Eel,NumPy,SciPy,matplotlib,SymPy,hashlib, passlib, Cython, Numba, ctypes, PyInstaller, JupyterLab, json, urllib, zenhan, jaconv
について記述しています.
データ処理用ライブラリ(pandas,NumPy,SciPy)の基本的な使用方法に関するテキスト「Python3によるデータ処理の基礎」を公開しました.これはまだまだ試作品でして,日々修正,改訂しています.(ミラーサイト)
【公開しているテキストにつきまして】
ここに公開しているテキストは「フリーソフトウェア」とします.(著作権は保持しています)
商用,非商用問わずご使用ください.印刷,再配布共にしていただいて構いませんが,その際は内容の改変をせずにお願いします.
内容に不備がありましたら是非ご連絡ください.可能な限り迅速に修正して再配信いたしますが,テキスト内の「免責事項」に了承してください.
■ Pythonのテキストに掲載しているサンプルプログラム
→こちら
■ 「Python3モジュールブック」に掲載しているサンプルプログラム
→こちら
■ 「Python3によるデータ処理の基礎」に掲載しているサンプルプログラム
→こちら
【動画配信】(はじめての方向け)
自力でテキストを読みながら学習するのが難しい方に向けた学習用動画(無料)を配信しています.学校の実習授業に準じた形の動画ですので各動画がかなり長いです.適宜休憩を入れながら無理のないペースで御覧ください.
→「『Pythonプログラミング入門』の入門」(全14回)
実用的なエンジニアリングのレベルではありませんが,よろしければご利用ください.
この動画で学んだ後でしたら,ここで配布しているPDFも自力で使えると思います.
プログラム開発や教材作成の参考にしている書籍(広告リンクになっています)
—【テキスト本体の目次】—————————————————-
1 はじめに — 1
1.1 Pythonでできること — 1
1.2 本書の内容 — 1
1.3 本書の読み方 — 1
1.4 処理系の導入(インストール)と起動の方法 — 2
1.4.1 Python処理系のディストリビューション(配布形態) — 2
1.4.2 Python処理系の起動 — 2
1.4.3 対話モード — 3
1.4.3.1 ヒストリ — 3
1.4.3.2 直前の値 — 3
1.5 本書で取り扱うGUIライブラリ — 4
1.6 表記に関する注意事項 — 4
1.7 Pythonに関する詳しい情報 — 4
2 Pythonの基礎 — 5
2.1 スクリプトの実行 — 5
2.1.1 プログラム中に記述するコメント — 6
2.1.2 プログラムのインデント — 7
2.2 文を分割して/連結して記述する方法 — 7
2.3 変数とデータの型 — 8
2.3.1 日本語の変数名の使用 — 9
2.3.2 変数名に関する注意 — 9
2.3.3 イコール「=」の連鎖(Multiple Assignment) — 10
2.3.4 変数の解放(廃棄) — 10
2.3.5 変数が値を保持する仕組みの概観 — 10
2.3.6 数値 — 12
2.3.6.1 整数: int型 — 12
2.3.6.2 巨大な整数値を扱う際の注意 — 13
2.3.6.3 浮動小数点数: float型 — 14
2.3.6.4 アンダースコア「\_」を含む数値リテラルの記述 — 14
2.3.6.5 基数の指定: 2進数,8進数,16進数 — 15
2.3.6.6 複素数: complex型 — 15
2.3.6.7 最大値,最小値 — 16
2.3.6.8 浮動小数点数の誤差と丸め — 17
2.3.6.9 数学関数 — 17
2.3.6.10 特殊な値:inf, nan — 19
2.3.6.11 多倍長精度の浮動小数点数の扱い — 21
2.3.6.12 分数の扱い — 24
2.3.6.13 乱数の生成 — 26
2.3.7 文字列 — 27
2.3.7.1 エスケープシーケンス — 27
2.3.7.2 raw文字列(raw string) — 28
2.3.7.3 複数行に渡る文字列 — 28
2.3.7.4 文字列の長さ(文字数) — 28
2.3.7.5 文字列リテラルの連接 — 28
2.3.7.6 文字列の分解と合成 — 29
2.3.7.7 文字列の置換 — 31
2.3.7.8 文字の置換 — 31
2.3.7.9 英字,数字の判定 — 31
2.3.7.10 大文字/小文字の変換と判定 — 32
2.3.7.11 文字列の含有検査 — 32
2.3.7.12 文字列の検索 — 33
2.3.7.13 両端の文字の除去 — 34
2.3.7.14 文字コード,文字の種別に関すること — 35
2.3.8 真理値(bool型) — 37
2.3.9 ヌルオブジェクト: None — 38
2.3.10 型の変換 — 38
2.3.10.1 各種の値の文字列への変換(str,repr) — 38
2.3.11 型の検査 — 39
2.3.11.1 floatの値が整数値かどうかを検査する方法 — 39
2.3.12 基数の変換 — 40
2.3.12.1 n進数→10進数 — 40
2.3.12.2 10進数→n進数 — 40
2.3.13 ビット演算 — 41
2.3.13.1 ビット演算の累算代入 — 42
2.3.13.2 整数値のビット長を求める方法 — 42
2.3.14 バイト列 — 43
2.4 データ構造 — 44
2.4.1 リスト — 44
2.4.1.1 空リスト — 44
2.4.1.2 リストの要素へのアクセス — 44
2.4.1.3 リストの編集 — 45
2.4.1.4 リストによるスタック,キューの実現: popメソッド — 47
2.4.1.5 リストに対する検査 — 48
2.4.1.6 例外処理 — 49
2.4.1.7 要素の個数のカウント — 49
2.4.1.8 要素の合計: sum関数 — 50
2.4.1.9 要素の整列 (1): sortメソッド — 51
2.4.1.10 要素の整列 (2): sorted関数 — 51
2.4.1.11 要素の順序の反転 — 52
2.4.1.12 リストの複製 — 52
2.4.1.13 リストか否かの判定 — 54
2.4.1.14 リストの内部に他のリストを展開する方法 — 54
2.4.2 タプル — 54
2.4.2.1 リストとタプルの違い — 54
2.4.2.2 括弧の表記が省略できるケース — 55
2.4.2.3 特殊なタプル — 55
2.4.2.4 タプルの要素を整列(ソート)する方法 — 55
2.4.2.5 タプルか否かの判定 — 56
2.4.3 セット — 56
2.4.3.1 セットの要素となるオブジェクト — 56
2.4.3.2 セットの生成 — 57
2.4.3.3 セットに対する各種の操作 — 57
2.4.3.4 集合論の操作 — 59
2.4.3.5 セットか否かの判定 — 59
2.4.3.6 frozenset — 60
2.4.4 辞書型 — 60
2.4.4.1 空の辞書の作成 — 60
2.4.4.2 エントリの削除 — 61
2.4.4.3 getメソッドによる辞書へのアクセス — 61
2.4.4.4 辞書に対するpop — 62
2.4.4.5 辞書の更新 — 62
2.4.4.6 辞書の結合 — 63
2.4.4.7 辞書を他の辞書の内部に展開する方法 — 63
2.4.4.8 キーや値の列を取り出す方法 — 63
2.4.4.9 エントリの数を調べる方法 — 64
2.4.4.10 リストやタプルから辞書を生成する方法 — 64
2.4.4.11 辞書の全エントリを列として取り出す方法 — 65
2.4.4.12 辞書の複製 — 65
2.4.4.13 エントリの順序 — 65
2.4.4.14 辞書の整列 — 65
2.4.4.15 辞書の同値性 — 66
2.4.4.16 辞書か否かの判定 — 66
2.4.5 添字(スライス)の高度な応用 — 67
2.4.5.1 添字の値の省略 — 67
2.4.5.2 スライスオブジェクト — 67
2.4.5.3 逆順の要素指定 — 67
2.4.5.4 不連続な部分の取り出し — 68
2.4.6 データ構造の変換 — 68
2.4.7 データ構造の要素を他のデータ構造の中に展開する方法 — 69
2.4.8 データ構造に沿った値の割当て(分割代入) — 69
2.4.8.1 応用例: 変数の値の交換 — 70
2.4.8.2 データ構造の選択的な部分抽出 — 71
2.4.9 データ構造のシャッフル,ランダムサンプリング — 71
2.4.10 データ構造へのアクセスの速度について — 72
2.5 制御構造 — 73
2.5.1 繰り返し(1): for — 73
2.5.1.1 「スイート」の概念 — 73
2.5.1.2 スイートが1行の場合の書き方 — 74
2.5.1.3 range関数,rangeオブジェクト — 74
2.5.1.4 辞書のfor文への応用 — 75
2.5.1.5 for文におけるelse — 75
2.5.1.6 forを使ったデータ構造の生成(要素の内包表記) — 75
2.5.1.7 イテレータ — 76
2.5.1.8 分割代入を用いたfor文 — 77
2.5.1.9 zip関数とzipオブジェクト — 77
2.5.1.10 enumerateによるインデックス情報の付与 — 79
2.5.2 繰り返し(2): while — 80
2.5.3 繰り返しの中断とスキップ — 81
2.5.4 条件分岐 — 81
2.5.4.1 条件式 — 81
2.5.4.2 比較演算子の連鎖 — 82
2.5.4.3 各種の「空」値に関する条件判定 — 83
2.5.4.4 is演算子による比較 — 84
2.5.4.5 値の型の判定 — 85
2.6 入出力 — 86
2.6.1 標準出力 — 86
2.6.1.1 出力データの書式設定 — 86
2.6.1.2 sysモジュールによる標準出力の扱い — 89
2.6.2 標準入力 — 90
2.6.2.1 input関数による入力の取得 — 90
2.6.2.2 sysモジュールによる標準入力の扱い — 91
2.6.3 ファイルからの入力 — 91
2.6.3.1 ファイル,ディレクトリのパスについて — 92
2.6.3.2 扱うファイルのエンコーディング,改行コードの指定 — 93
2.6.3.3 テキストファイルとバイナリファイルについて — 95
2.6.3.4 バイト列の扱い — 95
2.6.3.5 バイト列のコード体系を調べる方法 — 97
2.6.3.6 指定したバイト数だけ読み込む方法 — 97
2.6.3.7 ファイルの内容を一度で読み込む方法 — 97
2.6.3.8 ファイルをイテレータとして読み込む方法 — 98
2.6.3.9 readlinesメソッドによるテキストファイルの読み込み — 98
2.6.3.10 データを読み込む際のファイル中の位置について — 98
2.6.4 ファイルへの出力 — 99
2.6.4.1 print関数によるファイルへの出力 — 99
2.6.4.2 writelinesメソッドによる出力 — 99
2.6.5 標準エラー出力 — 100
2.6.6 標準入出力でバイナリデータを扱う方法 — 102
2.6.7 パス(ファイル,ディレクトリ)の扱い:その1 – osモジュール — 102
2.6.7.1 カレントディレクトリに関する操作 — 102
2.6.7.2 ホームディレクトリの取得 — 102
2.6.7.3 ディレクトリ内容の一覧 — 103
2.6.7.4 ファイルのサイズの取得 — 103
2.6.7.5 ファイル,ディレクトリの検査 — 103
2.6.7.6 ファイル,ディレクトリの削除 — 103
2.6.7.7 実行中のスクリプトに関する情報 — 104
2.6.7.8 パスの表現に関すること — 104
2.6.8 パス(ファイル,ディレクトリ)の扱い:その2 – pathlibモジュール — 106
2.6.8.1 パスオブジェクトの生成 — 106
2.6.8.2 カレントディレクトリ,ホームディレクトリの取得 — 106
2.6.8.3 パスの存在の検査 — 106
2.6.8.4 ファイル,ディレクトリの検査 — 106
2.6.8.5 ディレクトリの要素を取得する — 106
2.6.8.6 ディレクトリ名,ファイル名,拡張子の取り出し — 107
2.6.8.7 パスの連結 — 107
2.6.8.8 ファイルシステム毎のパスの表現 — 107
2.6.8.9 URIへの変換 — 107
2.6.8.10 ファイルのオープン — 107
2.6.8.11 ファイル入出力 — 108
2.6.8.12 ディレクトリの作成 — 109
2.6.8.13 ファイル,ディレクトリの削除 — 109
2.6.9 コマンド引数の取得 — 109
2.6.10 入出力処理の際に注意すること — 110
2.6.11 CSVファイルの取り扱い: csvモジュール — 110
2.6.11.1 CSVファイルの出力 — 110
2.6.11.2 CSVファイルの入力 — 113
2.7 関数の定義 — 118
2.7.1 引数について — 118
2.7.1.1 引数に暗黙値を設定する方法 — 119
2.7.1.2 仮引数のシンボルを明に指定する関数呼び出し(キーワード引数) — 119
2.7.1.3 引数の個数が不定の関数 — 119
2.7.1.4 実引数に `*’ を記述する方法 — 120
2.7.1.5 キーワード引数を辞書として受け取る方法 — 120
2.7.1.6 実引数に `**’ を記述する方法 — 121
2.7.1.7 引数に与えたオブジェクトに対する変更の影響 — 121
2.7.1.8 引数に関するその他の事柄 — 123
2.7.2 変数のスコープ(関数定義の内外での変数の扱いの違い) — 124
2.7.3 関数の再帰的定義 — 125
2.7.3.1 再帰的呼び出しの回数の上限 — 125
2.7.3.2 再帰的呼び出しを応用する際の注意 — 127
2.7.4 内部関数 — 127
2.7.4.1 内部関数におけるローカル変数 — 128
2.7.4.2 内部関数はいつ作成されるのか — 129
2.7.4.3 内部関数の応用:クロージャ,エンクロージャ — 129
2.7.5 定義した関数の削除 — 131
2.8 オブジェクト指向プログラミング — 132
2.8.1 クラスの定義 — 132
2.8.1.1 コンストラクタとファイナライザ — 132
2.8.1.2 インスタンス変数 — 134
2.8.1.3 メソッドの定義 — 134
2.8.1.4 クラス変数 — 135
2.8.2 クラス,インスタンス間での属性の関係 — 137
2.8.3 setattr,getattr による属性へのアクセス — 138
2.8.4 組み込みの演算子や関数との連携 — 139
2.8.4.1 各種クラスのコンストラクタに対するフック — 140
2.8.4.2 算術演算子,比較演算子,各種関数に対するフック — 141
2.8.4.3 累算代入演算子に対するフック — 143
2.8.5 コンテナのクラスを実装する方法 — 143
2.8.6 イテレータのクラスを実装する方法 — 144
2.8.7 カプセル化 — 145
2.8.7.1 変数の隠蔽 — 145
2.8.7.2 アクセサ(ゲッタ,セッタ) — 146
2.8.8 オブジェクト指向プログラミングに関するその他の事柄 — 148
2.8.8.1 クラス変数,インスタンス変数の調査 — 148
2.8.8.2 クラスの継承関係の調査 — 148
2.8.8.3 インスタンスのクラスの調査 — 149
2.8.8.4 属性の調査(プロパティの調査) — 149
2.8.8.5 多重継承におけるメソッドの優先順位 — 149
2.8.8.6 静的メソッド(スタティックメソッド) — 151
2.9 データ構造に則したプログラミング — 152
2.9.1 map関数 — 152
2.9.1.1 複数の引数を取る関数のmap — 154
2.9.1.2 map関数にzipオブジェクトを与える方法 — 154
2.9.2 lambdaと関数定義 — 155
2.9.3 filter — 156
2.9.4 3項演算子としての if~else… — 157
2.9.5 all, anyによる一括判定 — 157
2.9.6 高階関数モジュール:functools — 159
2.9.6.1 reduce — 159
2.10 代入式 — 160
2.11 構造的パターンマッチング — 161
2.11.1 構造的なパターン — 162
2.11.2 条件付きのパターンマッチング — 163
2.11.3 クラスのインスタンスに対するパターンマッチング — 163
3 KivyによるGUIアプリケーションの構築 — 165
3.1 Kivyの基本 — 165
3.1.1 アプリケーションプログラムの実装 — 165
3.1.2 GUI構築の考え方 — 165
3.1.2.1 Widget(ウィジェット) — 166
3.1.2.2 Layout(レイアウト) — 166
3.1.2.3 Screen(スクリーン) — 167
3.1.3 ウィンドウの扱い — 167
3.1.4 マルチタッチの無効化 — 168
3.2 基本的なGUIアプリケーション構築の方法 — 168
3.2.1 イベント処理(導入編) — 168
3.2.1.1 イベントハンドリング — 169
3.2.2 アプリケーション構築の例 — 170
3.2.3 イベント処理(コールバックの登録による方法) — 172
3.2.4 ウィジェットの登録と削除 — 174
3.2.5 アプリケーションの開始と終了のハンドリング — 174
3.3 各種ウィジェットの使い方 — 175
3.3.1 ラベル:Label — 175
3.3.1.1 リソースへのフォントの登録 — 177
3.3.2 ボタン:Button — 178
3.3.3 テキスト入力:TextInput — 178
3.3.4 チェックボックス:CheckBox — 179
3.3.5 進捗バー:ProgressBar — 179
3.3.6 スライダ:Slider — 179
3.3.7 スイッチ:Switch — 179
3.3.8 トグルボタン:ToggleButton — 179
3.3.9 画像:Image — 180
3.3.9.1 サンプルプログラム — 180
3.4 Canvasグラフィックス — 181
3.4.1 Graphicsクラス — 181
3.4.1.1 Color — 182
3.4.1.2 Line — 182
3.4.1.3 Rectangle — 182
3.4.1.4 Ellipse — 182
3.4.2 サンプルプログラム — 182
3.4.2.1 正弦関数のプロット — 182
3.4.2.2 各種図形,画像の表示 — 183
3.4.3 フレームバッファへの描画 — 184
3.4.3.1 ピクセル値の取り出し — 186
3.4.3.2 イベントから得られる座標位置 — 186
3.5 スクロールビュー(ScrollView) — 186
3.5.1 ウィジェットのサイズ設定 — 188
3.5.2 マウスのドラッグによるスクロール — 188
3.6 ウィンドウサイズを固定(リサイズを禁止)する設定 — 188
3.7 Kivy言語によるUIの構築 — 188
3.7.1 Kivy言語の基礎 — 188
3.7.1.1 サンプルプログラムを用いた説明 — 188
3.7.1.2 PythonプログラムとKvファイルの対応 — 191
3.8 時間によるイベント — 191
3.8.1 時間イベントのスケジュール — 191
3.9 GUI構築の形式 — 192
3.9.1 スクリーンの扱い: ScreenとScreenManager — 192
3.9.1.1 ScreenManager — 192
3.9.1.2 Screen — 192
3.9.2 アクションバー: ActionBar — 194
3.9.3 タブパネル: TabbedPanel — 196
3.9.4 スワイプ: Carousel — 197
4 実用的なアプリケーション開発に必要な事柄 — 198
4.1 日付と時間に関する処理 — 198
4.1.1 日付と時刻の取り扱い: datetime モジュール — 198
4.1.1.1 文字列をdatetimeオブジェクトに変換する方法 — 198
4.1.1.2 datetimeオブジェクトの差: timedelta — 199
4.1.1.3 日付,時刻の書式整形 — 200
4.1.1.4 datetimeのプロパティ — 200
4.1.1.5 タイムゾーンについて — 201
4.1.2 timeモジュール — 203
4.1.2.1 基本的な機能 — 203
4.1.2.2 日付,時刻を表す文字列表現 — 205
4.1.2.3 応用例:datetimeオブジェクトとの間の変換 — 206
4.1.2.4 時間の計測 — 207
4.1.2.5 プログラムの実行待ち — 207
4.1.3 timeitモジュール — 208
4.2 ロケール(locale) — 209
4.2.1 ロケール設定の確認 — 209
4.2.2 使用できるロケールの調査 — 210
4.2.3 その他 — 211
4.2.3.1 現在のエンコーディングの調査 — 211
4.2.3.2 通貨の書式整形 — 211
4.3 文字列検索と正規表現 — 212
4.3.1 パターンの検索 — 212
4.3.1.1 正規表現を用いた検索 — 214
4.3.1.2 検索パターンの和結合 — 216
4.3.1.3 正規表現を用いたパターンマッチ — 216
4.3.1.4 行頭や行末でのパターンマッチ — 217
4.3.2 置換処理: re.sub — 218
4.3.2.1 複数行に渡る置換処理 — 218
4.3.2.2 パターンマッチのグループを参照した置換処理 — 219
4.3.3 文字列の分解への応用: re.split — 219
4.4 マルチスレッドとマルチプロセス — 220
4.4.1 マルチスレッド — 220
4.4.1.1 スレッドの実行状態の確認 — 221
4.4.1.2 全スレッドのリストを取得する方法 — 222
4.4.2 マルチプロセス — 222
4.4.2.1 ProcessPoolExecutor — 223
4.4.2.2 プロセスの実行状態と戻り値 — 223
4.4.3 マルチスレッドとマルチプロセスの実行時間の比較 — 224
4.5 非同期I/O: asyncio — 226
4.5.1 コルーチン — 226
4.5.2 await によるタスクの一時停止と切替え — 227
4.5.3 タスク登録の簡便な方法 — 228
4.6 処理のスケジューリング — 229
4.6.1 sched モジュール — 229
4.6.1.1 基本的な使用方法 — 229
4.6.1.2 イベントを独立したスレッドで実行する方法 — 230
4.6.1.3 イベントの管理 — 232
4.6.2 schedule モジュール — 232
4.6.2.1 一定の時間間隔で処理を起動する方法 — 233
4.6.2.2 指定した時刻に処理を起動する方法 — 234
4.7 ジェネレータ — 235
4.7.1 ジェネレータ関数 — 235
4.7.2 ジェネレータ式 — 236
4.7.3 ジェネレータの入れ子 — 236
4.8 モジュール,パッケージの作成による分割プログラミング — 237
4.8.1 モジュール — 237
4.8.1.1 単体のソースファイルとしてのモジュール — 237
4.8.2 パッケージ(ディレクトリとして構成するライブラリ) — 238
4.8.2.1 モジュールの実行 — 239
4.8.3 モジュールが配置されているディレクトリの調査 — 239
4.8.4 \_\_init\_\_.pyについて — 240
4.9 ファイル内でのランダムアクセス — 242
4.9.1 ファイルのアクセス位置の指定(ファイルのシーク) — 242
4.9.2 サンプルプログラム — 242
4.10 データオブジェクトの保存と読込み: pickleモジュール — 244
4.11 バイナリデータの作成と展開: structモジュール — 246
4.11.1 バイナリデータの作成 — 246
4.11.2 バイナリデータの展開 — 247
4.11.3 バイトオーダーについて — 247
4.12 バイナリデータをテキストに変換する方法: base64モジュール — 249
4.12.1 バイト列→Base64データ — 249
4.12.2 Base64データ→バイト列 — 249
4.12.3 サンプルプログラム — 249
4.13 編集可能なバイト列: bytearray — 250
4.13.1 bytearrayの作成方法 — 250
4.13.2 他の型への変換 — 251
4.13.3 ファイルへの出力 — 251
4.14 execとeval — 252
4.14.1 名前空間の指定 — 252
4.14.2 eval関数 — 252
4.15 collectionsモジュール — 253
4.15.1 キュー: deque — 253
4.15.1.1 要素の追加と取り出し: append,pop — 253
4.15.1.2 要素の順序の回転: rotate — 253
4.15.2 要素の集計: Counter — 254
4.15.2.1 出現頻度の順に集計結果を取り出す — 254
4.15.3 namedtuple — 255
4.16 itertoolsモジュール — 256
4.16.1 イテレータの連結: chain — 256
4.16.2 無限のカウンタ: count — 256
4.16.3 イテレータの繰り返し: cycle — 256
4.16.4 オブジェクトの繰り返し: repeat — 257
4.16.5 連続要素のグループ化: groupby — 257
4.16.6 直積集合: product — 258
4.16.7 組合せ: combinations — 259
4.16.8 順列: permutations — 259
4.17 列挙型: enumモジュール — 260
4.17.1 Enum型 — 260
4.17.2 定数の取り扱いを実現する方法の例 — 261
4.17.3 IntEnum — 262
4.17.4 auto関数によるEnum要素への値の割り当て — 262
4.18 例外(エラー)の処理 — 264
4.18.1 エラーメッセージをデータとして取得する方法: tracebackモジュール — 264
4.18.2 例外を発生させる方法 — 264
4.18.3 例外オブジェクト — 265
4.18.3.1 例外オブジェクトのクラス階層 — 266
4.19 使用されているシンボルの調査 — 266
4.20 with構文 — 267
4.21 デコレータ — 271
4.21.1 引数を取るデコレータ — 272
4.22 データ構造の整形表示: pprintモジュール — 274
4.23 処理環境に関する情報の取得 — 275
4.23.1 Pythonのバージョン情報の取得 — 275
4.23.2 platformモジュールの利用 — 275
4.23.3 環境変数の参照 — 276
4.24 ファイル,ディレクトリに対する操作: shutil モジュール — 278
4.24.1 ファイルの複製 — 278
4.24.2 ディレクトリ階層の複製 — 278
4.24.3 書庫ファイル(アーカイブ)の取り扱いと圧縮処理に関すること — 278
4.24.3.1 書庫(アーカイブ)の作成 — 279
4.24.3.2 書庫(アーカイブ)の展開 — 279
4.25 ZIP書庫の扱い: zipfileモジュール — 279
4.25.1 ZIP書庫ファイルを開く — 279
4.25.2 書庫へのメンバの追加 — 280
4.25.3 書庫の内容の確認 — 280
4.25.4 書庫のメンバの読み込み — 280
4.25.5 書庫の展開 — 281
4.25.5.1 パスワードで保護されたZIP書庫へのアクセス — 281
4.26 コマンド引数の扱い: argparseモジュール — 282
4.26.1 コマンド引数の形式 — 282
4.26.2 使用方法 — 282
4.26.2.1 オプション引数の設定 — 282
4.26.2.2 位置引数の設定 — 283
4.26.2.3 コマンドラインの解析処理 — 283
4.26.3 サンプルプログラムに沿った説明 — 283
4.26.3.1 ヘルプ機能 — 284
4.26.3.2 コマンド引数の型の指定 — 284
4.26.4 サブコマンドの実現方法 — 285
4.27 スクリプトの終了(プログラムの終了) — 286
4.27.1 sys.exit 関数 — 286
4.27.2 os.\_exit 関数 — 287
4.27.3 スクリプト終了時に実行する処理: atexitモジュール — 287
4.28 Pythonの型システム — 288
4.28.1 型の階層(クラス階層) — 288
4.28.1.1 スーパークラス,サブクラスを調べる方法 — 288
5 TCP/IPによる通信 — 291
5.1 socketモジュール — 291
5.1.1 ソケットの用意 — 291
5.1.2 サーバ側プログラムの処理 — 291
5.1.3 クライアント側プログラムの処理 — 292
5.1.4 送信と受信 — 292
5.1.5 サンプルプログラム — 292
5.2 WWWコンテンツ解析 — 294
5.2.1 requestsライブラリ — 294
5.2.1.1 リクエストの送信に関するメソッド — 294
5.2.1.2 取得したコンテンツに関するメソッド — 294
5.2.1.3 Sessionオブジェクトに基づくアクセス — 295
5.2.2 Beautiful Soupライブラリ — 296
5.2.2.1 BSにおけるHTMLコンテンツの扱い — 296
6 外部プログラムとの連携 — 298
6.1 外部プログラムを起動する方法 — 298
6.1.1 標準入出力の接続 — 298
6.1.1.1 外部プログラムの標準入力のクローズ — 301
6.1.2 非同期の入出力 — 301
6.1.3 外部プロセスとの同期(終了の待機) — 303
6.1.4 外部プログラムを起動する更に簡単な方法 — 303
7 サウンドの入出力 — 305
7.1 基礎知識 — 305
7.2 WAV形式ファイルの入出力:waveモジュール — 305
7.2.1 WAV形式ファイルのオープンとクローズ — 305
7.2.1.1 WAV形式データの各種属性について — 306
7.2.2 WAV形式ファイルからの読込み — 306
7.2.3 サンプルプログラム — 306
7.2.4 量子化ビット数とサンプリング値の関係 — 307
7.2.5 読み込んだフレームデータの扱い — 307
7.2.6 WAV形式データを出力する例(1):リストからWAVファイルへ — 309
7.2.7 WAV形式データを出力する例(2):NumPyの配列からWAVファイルへ — 310
7.2.8 サウンドのデータサイズに関する注意点 — 310
7.3 サウンドの入力と再生:PyAudioライブラリ — 312
7.3.1 ストリームを介したサウンド入出力 — 312
7.3.2 WAV形式サウンドファイルの再生 — 313
7.3.2.1 サウンド再生の終了の検出 — 315
7.3.3 音声入力デバイスからの入力 — 315
A Pythonに関する情報 — 318
A.1 Pythonのインターネットサイト — 318
A.2 Pythonのインストール作業の例 — 318
A.2.1 PSF版インストールパッケージによる方法 — 318
A.2.2 Anacondaによる方法 — 319
A.3 Python起動のしくみ — 320
A.3.1 PSF版Pythonの起動 — 320
A.3.2 Anaconda Navigatorの起動 — 320
A.3.3 Anaconda Promptの起動 — 320
A.3.3.1 condaコマンドによるPython環境の管理 — 322
A.4 PIPによるライブラリ管理 — 322
A.4.1 PIPコマンドが実行できない場合の解決策 — 323
B Kivyに関する情報 — 324
B.1 Kivy利用時のトラブルを回避するための情報 — 324
B.1.1 Kivyが使用する描画APIの設定 — 324
B.1.2 SDLについて — 324
B.2 GUIデザインツール — 324
C Tkinter:基本的なGUIツールキット — 325
C.1 基本的な扱い方 — 325
C.1.1 使用例 — 326
C.1.1.1 ウィンドウサイズ変更の可否の設定 — 327
C.1.2 ウィジェットの配置 — 327
C.2 各種のウィジェット — 329
C.2.1 チェックボタンとラジオボタン — 329
C.2.1.1 Variableクラス — 329
C.2.2 エントリ(テキストボックス)とコンボボックス — 331
C.2.2.1 プログラムの終了 — 332
C.2.3 リストボックス — 332
C.2.4 テキスト(文字編集領域)とスクロールバー — 334
C.2.5 スケール(スライダ)とプログレスバー — 335
C.2.5.1 Variableクラスのコールバック関数設定 — 336
C.3 メニューの構築 — 337
C.4 Canvasの描画 — 338
C.4.1 描画メソッド(一部) — 338
C.4.1.1 使用できるフォントを調べる方法 — 339
C.4.2 図形の管理 — 341
C.5 イベントハンドリング — 343
C.5.1 時間を指定した関数の実行 — 345
C.6 複数のウィンドウの表示 — 346
C.7 ディスプレイやウィンドウに関する情報の取得 — 347
C.8 メッセージボックス(messagebox) — 348
C.8.1 アプリケーション終了のハンドリング — 349
C.9 ウィジェットの親,子を調べる方法 — 350
D ライブラリの取り扱いについて — 351
D.1 ライブラリの読込みに関すること — 351
D.1.1 ライブラリ読込みにおける別名の付与 — 351
D.1.2 接頭辞を省略するためのライブラリの読込み — 351
D.1.2.1 接頭辞を省略する際の注意(名前の衝突) — 352
D.1.3 ライブラリのパス: sys.path — 352
D.1.4 既に読み込まれているライブラリの調査: sys.modules — 352
D.1.5 The Zen of Python — 353
D.2 pkg\_resources によるライブラリ情報の取得 — 353
D.3 各種ライブラリの紹介 — 354
E 対話モードを使いやすくするための工夫 — 355
E.1 警告メッセージの抑止と表示 — 355
E.2 メモリの使用状態の管理 — 356
E.2.1 オブジェクトのサイズの調査 — 356
F 文書化文字列と関数アノテーション — 358
F.1 関数アノテーション(Function Annotations) — 359
G サンプルプログラム — 360
G.1 リスト/セット/辞書のアクセス速度の比較 — 360
G.1.1 スライスに整数のインデックスを与える形のアクセス — 360
G.1.2 メンバシップ検査に要する時間 — 361
G.2 ライブラリ使用の有無における計算速度の比較 — 364
G.3 pathlibの応用例 — 367
G.4 浮動小数点数と2進数の間の変換 — 368
G.4.1 mpmathを用いた例 — 369
G.5 全てのUnicode文字の列挙 — 370
H その他 — 371
H.1 演算子の優先順位 — 371
H.2 アスキーコード表 — 372
—————————————————————————
—【モジュールブックの目次】————————————————
1 画像の入出力と処理 — 1
1.1 OpenCV — 1
1.1.1 動画像の入力 — 2
1.1.2 ユーザインターフェース — 2
1.1.2.1 動画ファイルからの入力 — 3
1.1.3 フレームのファイルへの保存 — 3
1.1.4 静止画像の読込み — 3
1.1.5 色空間とチャネル — 4
1.1.5.1 画像フレームのチャネルの順序 — 5
1.1.5.2 色空間の変換 — 6
1.1.5.3 チャネルの分解と合成 — 7
1.1.5.4 色空間の選択に関すること — 8
1.1.5.5 参考)HSVの色相に関すること — 9
1.1.6 カラー画像からモノクロ画像への変換 — 10
1.1.6.1 モノクロ2値化 (1):一定の閾値で判定 — 10
1.1.6.2 モノクロ2値化 (2):閾値を適応的に判定 — 11
1.1.7 画像フレームに対する描画 — 13
1.1.7.1 基本的な考え方 — 13
1.1.7.2 線分,矢印 — 13
1.1.7.3 矩形,円,楕円,円弧 — 14
1.1.7.4 折れ線,多角形 — 16
1.1.7.5 文字列 — 17
1.1.7.6 マーカー — 18
1.2 Pillow — 20
1.2.1 画像ファイルの読込みと保存 — 20
1.2.1.1 EPSを読み込む際の解像度 — 21
1.2.1.2 画像ファイルの保存 — 21
1.2.2 Imageオブジェクトの新規作成 — 21
1.2.3 画像の閲覧 — 22
1.2.4 画像の編集 — 22
1.2.4.1 画像の拡大と縮小 — 22
1.2.4.2 画像の部分の取り出し — 22
1.2.4.3 画像の複製 — 23
1.2.4.4 画像の貼り付け — 23
1.2.4.5 画像の回転 — 23
1.2.5 画像処理 — 23
1.2.5.1 色の分解と合成 — 23
1.2.5.2 カラー画像からモノクロ画像への変換 — 24
1.2.6 描画 — 25
1.2.7 アニメーションGIFの作成 — 26
1.2.8 Imageオブジェクトから画素の数値配列への変換 — 27
2 GUIとマルチメディア — 28
2.1 pygame — 28
2.1.1 基礎事項 — 28
2.1.1.1 Surfaceオブジェクト — 28
2.1.1.2 アプリケーションの実行ループ — 28
2.1.2 描画機能 — 30
2.1.2.1 描画のサンプルプログラム — 32
2.1.2.2 回転,拡縮のサンプルプログラム — 34
2.1.3 キーボードとマウスのハンドリング — 36
2.1.4 音声の再生 — 37
2.1.4.1 Soundオブジェクトを用いる方法 — 38
2.1.4.2 SoundオブジェクトからNumPyの配列への変換 — 39
2.1.5 スプライトの利用 — 40
2.2 Eel — 45
2.2.1 基礎事項 — 45
2.2.1.1 Chromeの起動モード — 46
2.2.2 Python/JavaScriptで記述した関数の呼出し — 46
2.2.2.1 関数の戻り値について — 48
2.3 メディアデータの変換: PyDub — 49
2.3.1 音声ファイルの読込み — 49
2.3.2 音声データからNumPyの配列への変換 — 49
2.3.3 NumPyの配列から音声データへの変換 — 50
2.3.4 音声ファイルの保存 — 50
2.3.4.1 MP3形式ファイルとして保存 — 50
2.3.4.2 WAV形式ファイルとして保存 — 50
3 科学技術系 — 51
3.1 数値計算と可視化のためのライブラリ:NumPy / matplotlib — 51
3.1.1 NumPyで扱うデータ型 — 51
3.1.2 配列オブジェクトの基本的な扱い方 — 51
3.1.2.1 配列の要素の型について — 52
3.1.2.2 真理値の配列 — 52
3.1.2.3 基本的な計算処理 — 53
3.1.2.4 扱える値の範囲 — 54
3.1.2.5 特殊な値:無限大と非数 — 54
3.1.2.6 データ列の生成(数列の生成) — 55
3.1.2.7 多次元配列の生成 — 56
3.1.2.8 配列の形状の調査 — 56
3.1.2.9 配列の要素へのアクセス — 57
3.1.2.10 スライスにデータ列を与えた場合の動作 — 57
3.1.2.11 指定した行,列へのアクセス — 58
3.1.2.12 配列形状の変形 — 58
3.1.2.13 行,列の転置 — 60
3.1.2.14 行,列の反転と回転 — 60
3.1.2.15 型の変換 — 61
3.1.2.16 配列の複製(コピー) — 61
3.1.3 配列の連結と繰り返し — 62
3.1.3.1 append,concatenateによる連結 — 62
3.1.3.2 hstack,vstackによる連結 — 63
3.1.3.3 tileによる配列の繰り返し — 64
3.1.4 配列への要素の挿入 — 64
3.1.4.1 行,列の挿入 — 65
3.1.5 配列要素の部分的削除 — 66
3.1.5.1 区間を指定した削除 — 66
3.1.5.2 行,列の削除 — 67
3.1.6 配列の次元の拡大 — 67
3.1.6.1 newaxisオブジェクトによる方法 — 67
3.1.6.2 expand_dimsによる方法 — 68
3.1.7 データの抽出 — 68
3.1.7.1 真理値列によるマスキング — 68
3.1.7.2 条件式による要素の抽出 — 69
3.1.7.3 論理演算子による条件式の結合 — 69
3.1.7.4 whereによる要素の抽出と置換 — 69
3.1.7.5 最大値,最小値,その位置の探索 — 70
3.1.8 データの整列(ソート) — 72
3.1.8.1 2次元配列の整列 — 72
3.1.8.2 整列結果のインデックスを取得する方法 — 73
3.1.9 配列要素の差分の配列 — 73
3.1.10 配列に対する様々な処理 — 74
3.1.10.1 重複する要素の排除 — 74
3.1.10.2 要素の個数の集計 — 74
3.1.10.3 整数要素の集計 — 75
3.1.10.4 指定した条件を満たす要素の集計 — 75
3.1.11 配列に対する演算:1次元から1次元 — 75
3.1.12 データの可視化(基本) — 76
3.1.12.1 作図処理の基本的な手順 — 77
3.1.12.2 2次元のプロット:折れ線グラフ — 77
3.1.12.3 グラフの目盛りの設定 — 80
3.1.12.4 複数のグラフの作成 — 81
3.1.12.5 matplotlibのグラフの構造 — 83
3.1.12.6 グラフの枠を非表示にする方法 — 87
3.1.12.7 極座標プロット — 87
3.1.12.8 レーダーチャート(極座標の応用) — 88
3.1.12.9 日本語の見出し・ラベルの表示 — 89
3.1.12.10 グラフを画像ファイルとして保存する方法 — 90
3.1.13 乱数の生成 — 91
3.1.13.1 一様乱数の生成 — 91
3.1.13.2 整数の乱数の生成 — 91
3.1.13.3 正規乱数の生成 — 91
3.1.13.4 乱数のseedについて — 91
3.1.13.5 RandomStateオブジェクト — 92
3.1.14 統計に関する処理 — 93
3.1.14.1 合計 — 93
3.1.14.2 最大値,最小値 — 93
3.1.14.3 平均,分散,標準偏差 — 93
3.1.14.4 分位点,パーセント点 — 94
3.1.14.5 区間と集計(階級と度数調査) — 94
3.1.14.6 最頻値を求める方法 — 97
3.1.14.7 相関係数 — 100
3.1.14.8 データのシャッフル — 101
3.1.15 データの可視化(2) — 101
3.1.15.1 ヒストグラム — 101
3.1.15.2 散布図 — 103
3.1.15.3 棒グラフ — 103
3.1.15.4 円グラフ — 105
3.1.15.5 箱ひげ図 — 107
3.1.16 多次元配列に対する演算 — 108
3.1.16.1 meshgrid関数の働き — 109
3.1.17 データの可視化:3次元プロット — 110
3.1.17.1 ワイヤフレーム — 110
3.1.17.2 面プロット(surface plot) — 110
3.1.17.3 3次元の棒グラフ — 112
3.1.17.4 3次元の散布図 — 112
3.1.18 データの可視化:その他 — 114
3.1.18.1 ヒートマップ — 114
3.1.18.2 表の作成 — 116
3.1.19 高速フーリエ変換(FFT) — 118
3.1.19.1 時間領域から周波数領域への変換:フーリエ変換 — 118
3.1.19.2 周波数領域から時間領域への変換:フーリエ変逆換 — 118
3.1.19.3 プロットのアスペクト比の指定 — 121
3.1.19.4 フーリエ変換を使用する際の注意 — 121
3.1.20 複素数の計算 — 122
3.1.20.1 複素数の平方根 — 122
3.1.20.2 複素数のノルム — 122
3.1.20.3 共役複素数 — 122
3.1.20.4 複素数の偏角(位相) — 123
3.1.21 行列,ベクトルの計算(線形代数のための計算) — 123
3.1.21.1 行列の和と積 — 123
3.1.21.2 単位行列,ゼロ行列,他 — 123
3.1.21.3 行列の要素を全て同じ値にする — 124
3.1.21.4 ベクトルの内積 — 125
3.1.21.5 対角成分,対角行列 — 125
3.1.21.6 行列の転置 — 126
3.1.21.7 行列式と逆行列 — 126
3.1.21.8 固有値と固有ベクトル — 126
3.1.21.9 行列のランク — 127
3.1.21.10 複素共役行列 — 127
3.1.21.11 エルミート共役行列 — 127
3.1.21.12 ベクトルのノルム — 127
3.1.22 入出力:配列オブジェクトのファイルI/O — 128
3.1.22.1 テキストファイルへの保存 — 128
3.1.22.2 テキストファイルからの読み込み — 130
3.1.22.3 バイナリファイルへのI/O — 131
3.1.22.4 データの圧縮保存と読み込み — 132
3.1.22.5 配列をバイトデータに変換して入出力に使用する — 133
3.1.23 行列の検査 — 134
3.1.23.1 全て真,少なくとも1つは真: all,any — 134
3.1.24 配列を処理するユーザ定義関数の実装について — 135
3.1.25 行列の計算を応用した計算速度の改善の例 — 137
3.1.25.1 要素の型によって異なる計算速度 — 138
3.1.26 画像データの扱い — 138
3.1.26.1 画素の配列から画像データへの変換(PILライブラリとの連携) — 140
3.1.26.2 画像データから画素の配列への変換(PILライブラリとの連携) — 140
3.1.26.3 OpenCVにおける画素の配列 — 141
3.1.26.4 サンプルプログラム:画像の三色分解 — 142
3.1.27 図形の描画:matplotlib.patches — 144
3.1.27.1 四角形,円,楕円,正多角形 — 144
3.1.27.2 円弧(楕円弧) — 145
3.1.27.3 ポリゴン — 146
3.1.28 3次元のポリゴン表示 — 146
3.1.29 日付,時刻の扱い — 148
3.1.29.1 datetime64クラス — 148
3.1.29.2 timedelta64クラス — 148
3.1.29.3 日付,時刻の応用例 — 149
3.1.30 その他の機能 — 151
3.1.30.1 基準以上/以下のデータの抽出 — 151
3.1.30.2 指定した範囲のデータの抽出 — 153
3.2 科学技術計算用ライブラリ: SciPy — 155
3.2.1 信号処理ツール: scipy.signal — 155
3.2.1.1 基本的な波形の生成 — 155
3.2.2 WAVファイル入出力ツール: scipy.io.wavfile — 158
3.2.2.1 WAV形式ファイル出力: write関数 — 158
3.2.2.2 WAV形式ファイル入力: read関数 — 159
3.2.2.3 32-bit floating-point のWAV形式サウンドデータ — 159
3.3 数式処理ライブラリ: SymPy — 161
3.3.1 モジュールの読込みに関する注意 — 161
3.3.2 基礎事項 — 161
3.3.2.1 記号オブジェクトの生成 — 162
3.3.2.2 数式の簡単化(評価) — 162
3.3.2.3 式 f(x,y,…) の構造 (頭部と引数列の取り出し) — 163
3.3.2.4 定数 — 164
3.3.3 基本的な数式処理機能 — 164
3.3.3.1 式の展開 — 164
3.3.3.2 因数分解 — 164
3.3.3.3 指定した記号による整理 — 164
3.3.3.4 約分:分数の簡単化(1) — 165
3.3.3.5 部分分数 — 165
3.3.3.6 分数の簡単化(2) — 166
3.3.3.7 代入(記号の置換) — 166
3.3.3.8 各種の数学関数 — 166
3.3.3.9 式の型 — 166
3.3.4 解析学的処理 — 167
3.3.4.1 極限 — 167
3.3.4.2 導関数 — 167
3.3.4.3 微分操作の遅延実行 — 168
3.3.4.4 原始関数 — 168
3.3.4.5 integrateの遅延実行 — 168
3.3.4.6 定積分 — 169
3.3.4.7 級数展開 — 169
3.3.5 各種方程式の求解 — 169
3.3.5.1 代数方程式の求解 — 169
3.3.5.2 微分方程式の求解 — 170
3.3.5.3 階差方程式の求解(差分方程式,漸化式) — 170
3.3.6 線形代数 — 171
3.3.6.1 行列の連結 — 171
3.3.6.2 行列の形状 — 172
3.3.6.3 行列の要素へのアクセス — 172
3.3.6.4 行列式 — 173
3.3.6.5 逆行列 — 173
3.3.6.6 行列の転置 — 173
3.3.6.7 ベクトル,内積 — 173
3.3.6.8 固有値,固有ベクトル — 174
3.3.7 総和 — 174
3.3.8 パターンマッチ — 175
3.3.9 数値計算 — 175
3.3.9.1 素因数分解 — 175
3.3.9.2 素数 — 176
3.3.9.3 近似値 — 177
3.3.10 書式の変換出力 — 177
3.3.10.1 LaTeX — 177
3.3.10.2 MathML — 177
3.3.11 グラフのプロット — 178
3.3.11.1 グラフを画像ファイルに保存する方法 — 179
4 セキュリティ関連 — 180
4.1 hashlib — 180
4.1.1 基本的な使用方法 — 180
4.2 passlib — 180
4.2.1 使用できるアルゴリズム — 180
5 プログラムの高速化/アプリケーション構築 — 182
5.1 Cython — 182
5.1.1 使用例 — 182
5.1.2 高速化のための調整 — 184
5.2 Numba — 185
5.2.1 基本的な使用方法 — 185
5.2.2 型指定による高速化 — 186
5.3 ctypes — 186
5.3.1 C言語による共有ライブラリ作成の例 — 186
5.3.2 共有ライブラリ内の関数を呼び出す例 — 187
5.3.3 引数と戻り値の扱いについて — 187
5.3.3.1 配列データの受け渡し — 190
5.4 PyInstaller — 193
5.4.1 簡単な使用例 — 193
5.4.1.1 単一の実行ファイルとしてビルドする方法 — 194
6 対話作業環境(JupyterLab) — 195
6.1 基礎事項 — 195
6.1.1 起動と終了 — 196
6.1.2 表示領域の構成と操作方法 — 196
6.1.2.1 ノートブックの使用例 — 197
6.1.2.2 カーネル(Kernel)について — 199
6.1.3 Notebookでのinput関数の実行 — 199
6.2 Markdownによるコメント表示 — 199
6.3 使用例 — 201
6.3.1 MathJaxによるSymPyの式の整形表示 — 201
6.3.2 IPython.displayモジュールによるサウンドの再生 — 202
7 その他 — 204
7.1 json:データ交換フォーマットJSONの使用 — 204
7.1.1 JSONの表記 — 204
7.1.2 使用例 — 204
7.1.2.1 JSONデータのファイルI/O — 204
7.1.2.2 真理値,Noneの扱い — 205
7.2 urllib:URLに関する処理 — 206
7.2.1 他バイト文字の扱い(「%」エンコーディング) — 206
7.2.1.1 文字コード体系の指定 — 206
7.3 zenhan:全角⇔半角変換 — 207
7.4 jaconv:日本語文字に関する各種の変換 — 207
—————————————————————————