191 Views
December 21, 21
スライド概要
トピックス:Python, プログラミング, Python Tutor, モジュール, インポート, import, サブモジュール, パッケージ, 標準ライブラリ, 算法, アルゴリズム
Python プログラミングの基本
https://www.kkaneko.jp/pro/po/index.html
金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
po-7. モジュール,標 準ライブラリ,算法 (アルゴリズム) トピックス:モジュール,インポート,import, サブモジュール,パッケージ,標準ライブラリ, 算法(アルゴリズム) URL: https://www.kkaneko.jp/pro/po/index.html (Python プログラミングの基本) 金子邦彦 1
全体まとめ ① モジュール プログラムの共通部分を別ファイルにできる機能. ② 算法(アルゴリズム) ※ コンピュータは,ある定まった手順により問題を解く プログラムの見通しの良さ,性能向上,バグの防止に役立つ ③ 標準ライブラリ Python では,標準ライブラリとして math, numpy などのパッ ケージがあり,さまざまな算法(アルゴリズム)を網羅してい る ④ 算法(アルゴリズム)を駆使しても, 解くのに時間がかか りすぎるため難しいという問題がある 2 このことは,暗号の基礎として役立つ
アウトライン 7-1 7-2 7-3 項目 復習,全体まとめ モジュール,インポート 標準ライブラリ 算法(アルゴリズム) 3
プログラミング (programming) • コンピュータは,プログラムで動く • プログラミングは,プログラムを設計,製作 すること • 何らかの作業を,コンピュータで実行させる ために行う プログラムの ソースコード プログラムの 実行結果 4
ソースコード (source code) • プログラムを,何らかのプログラミング言語 で書いたもの • 「ソフトウエアの設計図」ということも. 人間も読み書き,編集できる • 複数のプログラミング言語を使うことも import picamera camera = picamera.PiCamera() camera.capture("1.jpg") exit() Raspberry Pi で,カメラを使って 撮影し,画像を保存するプログラムの ソースコード 5
変数 • 名前の付いたオブジェクトのことを変数という 場合がある(数学の変数とは違う意味) • 式の中に変数を含めることができる x = 100 y = 200 print(x + y) プログラム 実行結果 6
関数 • この関数の本体は 「return a * 1.1」 • この関数は,式「a * 1.1」に,名前 foo を付 けたものと考えることもできる 7
7-1. モジュール,インポート 8
ライブラリとモジュール • ライブラリとは 複数のプログラムが共有して使えるような 機能を持ったプログラムのこと. 多くの場合,プログラムの実行時にリンク(結 合)される • パッケージ (モジュール,インクルードファイ ルなどともいう) 複数のプログラムが共有して使えるような 機能を持ったソースコード ※ パッケージの種類、豊富は、プログラミング言語 とに違う 9
モジュール モジュール 別ファイルの Python プログラム Pythonプログラム① Pythonプログラム② モジュールを考えない場合 Pythonプログラム①改 Pythonプログラム②改 モジュールを考える場合 (ファイル数は増えるが, 全体として簡潔になる) 10
モジュール • Python のソースコードが入ったファイルを,モ ジュールにすることができる • モジュールは,インポート可能(次ページで説 明) モジュール名:bar ファイルに保存された Python プログラム (ファイル名:bar.py) ファイル名は何でもよいが,それによってモジュール名が決まる 11
インポート 別のモジュールをインポートすることで,インポー トしたモジュールの中の Python ソースコードにア クセスできるようになる. import <モジュール名> Python でのインポー トの方法 import bar でインポート ファイルに保存された Python プログラム (ファイル名:bar.py) 別のPython プログラム 実行結果として 103 が表示される 12
他のモジュールへのアクセス 1. インポートする import <モジュール名> 2. モジュールの中の関数等にアクセスする <モジュール名>.<オブジェクト名> 「オブジェクト名」は関数名など import bar でインポート ファイルに保存された Python プログラム (ファイル名:bar.py) 別のPython プログラム 実行結果として 103 が表示される 13
モジュールのインポートの仕組み 関数 foo import bar でインポート ファイルに保存された Python プログラム (ファイル名:bar.py) インポート時に,モジュール を機能させるための変数等が 自動で追加される __buildins__, __cached__, __doc__, __file__, __loader__, __name__, __package__, __spec__ を追加 別のPython プログラム と実行結果 print(dir(bar)) で,モジュール bar のアクセス可能 なオブジェクト名(関数名など)が表示される 14
モジュールの利用例 ① モジュール import hoge でインポート モジュールの動作確 認用のプログラム import hoge print(tax(10)) ファイルに保存された Python プログラム (ファイル名:hoge.py) 別のPython プログラム ソースコード 動作確認結果 15
モジュールの利用例 ② モジュールの機能が大量にあるときなどは, サブモジュールに分ける場合がある メインの部分 サブモジュール (モジュール名 yy) サブモジュール (モジュール名 zz) 全体で1つのモジュール (モジュール名 xx) インポート import xx from xx import yy from xx import zz でインポート 別のPython プログラム 16
2種類のモジュール • パッケージ化されていないモジュール モジュール名 bar ファイルに保存された Python プログラム (ファイル名:bar.py) • パッケージ化されたモジュール パッケージ化により,配布,インストールが容 易になっている (詳細割愛) 17
7-2. 標準ライブラリ 18
Python のライブラリ • 標準ライブラリの充実.多数の算法(アルゴリズム)が網 羅されている. • 標準ライブラリのほか,多数のパッケージが有志らにより 制作,配布されている(標準ライブラリで足りない場合, 補える) • オブジェクト指向の機能を持つ. データや関数をオブジェクトとして扱えるだけでなく,モ ジュールもオブジェクトとして簡単に扱うことができる 19
標準ライブラリとその他のパッケージ インポート 自作の プログラム Python の標準機能として 備わっているパッケージ (標準ライブラリ) math import math import numpy numpy など import tensorflow インストール pip install tensorflow 有志らが制作, 配布している パッケージ tensorflow など Python は,パッケージが豊富であることも,人気の理由 20
Python の標準ライブラリ • 公式ドキュメント https://docs.python.org/ja/3/library/index.html • 組み込み関数,組み込み定数,組み込み型,組み込み例外, テキスト処理,バイナリデータ処理,データ型,数値と数 学,関数型プログラミング,ファイルとディレクトリ, データの永続化,デー圧縮とアーカイブ,ファイルフォー マット,暗号,オペレーティングシステム,並列実行,コ ンテキスト変数,ネットワーク通信とプロセス間通信,イ ンターネット上のデータ操作,HTMLとXML,インター ネットプロトコルとサービス,マルチメディアサービス, 国際化,プログラムのフレームワーク,グラフィカルユー ザインタフェース,開発ツール,デバッグとプロファイル, ソフトウエア・パッケージと配布,Pythonランタイムサー ビス,カスタム Python インタプリタ,モジュールのイン ポート,Python 言語サービス,各種サービス • 多くは「インポート」により使用する 21
7-3. 算法(アルゴリズム) 22
算法(アルゴリズム)の例 5×5×5×5×5×5×5×5×5×5×5×5×5× 5×5×5 は 152587890625 同じ 結果 掛け算: 15 回 掛け算: 4 回 算法(アルゴリズム)の工夫で,掛け算の回数を削減できる場合がある 23
次の2つのプログラムは,同じ答えが出る. a=5*5 b=a*a c=b*b d=c*c print(d) print(5*5*5*5*5*5*5*5*5*5*5*5*5*5*5*5) 24
次の2つのプログラムは,同じ答えが出る a = 10 * 10 b=a*a c=b*b print(c) print(10*10*10*10*10*10*10*10) 25
暗号を作成する Python プログラム Diffie-Hellman法で暗号化(Pythonを使用) 参考ウェブページ http://nbviewer.jupyter.org/github/yoavram/CS1001.py/blob/master/recitation4.ipynb 26
暗号を解読する Python プログラム Diffie-Hellman法の暗号を解読するプログラム 参考ウェブページ http://nbviewer.jupyter.org/github/yoavram/CS1001.py/blob/master/recitation4.ipynb 27
暗号作成より,暗号解読の方が手間がかかる • 暗号解読の算法(アルゴリズム)は発見済み ということが多い → プログラムを作成可能 • しかし,プログラムが答えを出すまでに時間がかかる場合がある すでに,2012 年に,このようなレポートが. https://www.dit.co.jp/service/security/report/03.html 英大小文字+数字+記号を組み合わせた ZIP のパスワード 6桁の解読時間: 2分24秒 = 超危険 8桁の解読時間: 14日 = 危険 10桁の解読時間: 341年 28
「計算可能性」 • 算法(アルゴリズム)の作成が不可能という問 題は,すでに発見済みである 人間にもコンピュータにも解けない問題 チューリングマシンの停止判定 29
全体まとめ ① モジュール プログラムの共通部分を別ファイルにできる機能. ② 算法(アルゴリズム) ※ コンピュータは,ある定まった手順により問題を解く プログラムの見通しの良さ,性能向上,バグの防止に役立つ ③ 標準ライブラリ Python では,標準ライブラリとして math, numpy などのパッ ケージがあり,さまざまな算法(アルゴリズム)を網羅してい る ④ 算法(アルゴリズム)を駆使しても, 解くのに時間がかか りすぎるため難しいという問題がある 30 このことは,暗号の基礎として役立つ
関連ページ • Python まとめページ https://www.kkaneko.jp/tools/man/python.html • Python プログラミングを学ぶ Python Tutor, VisuAlgo, Code Combat を使用 https://www.kkaneko.jp/cc/po/index.html • Python プログラム例 https://www.kkaneko.jp/pro/python/index.html • 人工知能の実行(Google Colaboratory を使用) https://www.kkaneko.jp/pro/ni/index.html • 人工知能の実行(Python を使用)(Windows 上) https://www.kkaneko.jp/pro/deepim/index.html 31