---
title: po-7. モジュール，標準ライブラリ，算法（アルゴリズム）
tags:  #python #プログラミング #モジュール #インポート #import #サブモジュール #パッケージ #ライブラリ #標準ライブラリ #算法 #アルゴリズム #python tutor #金子邦彦研究室  
author: [kunihikokaneko](https://www.docswell.com/user/6674398749)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LJ3NGP6DJ5.jpg?width=480
description: トピックス：Python, プログラミング, Python Tutor,  モジュール, インポート, import, サブモジュール, パッケージ, 標準ライブラリ, 算法, アルゴリズム  Python プログラミングの基本 https://www.kkaneko.jp/pro/po/index.html  金子邦彦研究室ホームページ https://www.kkaneko.jp/index.html
published: December 21, 21
canonical: https://www.docswell.com/s/6674398749/K12MR5-2021-12-21-210331
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LJ3NGP6DJ5.jpg)

po-7. モジュール，標
準ライブラリ，算法
（アルゴリズム）
トピックス：モジュール，インポート，import，
サブモジュール，パッケージ，標準ライブラリ，
算法（アルゴリズム）
URL: https://www.kkaneko.jp/pro/po/index.html
（Python プログラミングの基本）
金子邦彦
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/8JDW1LV2EG.jpg)

全体まとめ
① モジュール
プログラムの共通部分を別ファイルにできる機能．
② 算法（アルゴリズム）
※ コンピュータは，ある定まった手順により問題を解く
プログラムの見通しの良さ，性能向上，バグの防止に役立つ
③ 標準ライブラリ
Python では，標準ライブラリとして math, numpy などのパッ
ケージがあり，さまざまな算法（アルゴリズム）を網羅してい
る
④ 算法（アルゴリズム）を駆使しても， 解くのに時間がかか
りすぎるため難しいという問題がある
2
このことは，暗号の基礎として役立つ


# Page. 3

![Page Image](https://bcdn.docswell.com/page/VEP9Q2VL78.jpg)

アウトライン
7-1
7-2
7-3
項目
復習，全体まとめ
モジュール，インポート
標準ライブラリ
算法（アルゴリズム）
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/27VM5DZ67Q.jpg)

プログラミング (programming)
• コンピュータは，プログラムで動く
• プログラミングは，プログラムを設計，製作
すること
• 何らかの作業を，コンピュータで実行させる
ために行う
プログラムの
ソースコード
プログラムの
実行結果
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/5JGG6Y42JL.jpg)

ソースコード (source code)
• プログラムを，何らかのプログラミング言語
で書いたもの
• 「ソフトウエアの設計図」ということも．
人間も読み書き，編集できる
• 複数のプログラミング言語を使うことも
import picamera
camera = picamera.PiCamera()
camera.capture(&quot;1.jpg&quot;)
exit()
Raspberry Pi で，カメラを使って
撮影し，画像を保存するプログラムの
ソースコード
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/47QX4MG9JP.jpg)

変数
• 名前の付いたオブジェクトのことを変数という
場合がある（数学の変数とは違う意味）
• 式の中に変数を含めることができる
x = 100
y = 200
print(x + y)
プログラム
実行結果
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/KE46QV8RJ1.jpg)

関数
• この関数の本体は
「return a * 1.1」
• この関数は，式「a * 1.1」に，名前 foo を付
けたものと考えることもできる
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/L71VP32VJG.jpg)

7-1. モジュール，インポート
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/G7WL2PR3J2.jpg)

ライブラリとモジュール
• ライブラリとは
複数のプログラムが共有して使えるような
機能を持ったプログラムのこと．
多くの場合，プログラムの実行時にリンク（結
合）される
• パッケージ （モジュール，インクルードファイ
ルなどともいう）
複数のプログラムが共有して使えるような
機能を持ったソースコード
※ パッケージの種類、豊富は、プログラミング言語
とに違う
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4JZMDKRG73.jpg)

モジュール
モジュール
別ファイルの
Python プログラム
Pythonプログラム①
Pythonプログラム②
モジュールを考えない場合
Pythonプログラム①改
Pythonプログラム②改
モジュールを考える場合
（ファイル数は増えるが，
全体として簡潔になる）
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/YE6N1QRQEV.jpg)

モジュール
• Python のソースコードが入ったファイルを，モ
ジュールにすることができる
• モジュールは，インポート可能（次ページで説
明）
モジュール名：bar
ファイルに保存された
Python プログラム
（ファイル名：bar.py)
ファイル名は何でもよいが，それによってモジュール名が決まる
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GE554R82E4.jpg)

インポート
別のモジュールをインポートすることで，インポー
トしたモジュールの中の Python ソースコードにア
クセスできるようになる．
import ＜モジュール名＞
Python でのインポー
トの方法
import bar でインポート
ファイルに保存された
Python プログラム
（ファイル名：bar.py)
別のPython
プログラム
実行結果として
103 が表示される
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/972NVDK1JR.jpg)

他のモジュールへのアクセス
1. インポートする
import ＜モジュール名＞
2. モジュールの中の関数等にアクセスする
＜モジュール名＞.＜オブジェクト名＞
「オブジェクト名」は関数名など
import bar でインポート
ファイルに保存された
Python プログラム
（ファイル名：bar.py)
別のPython
プログラム
実行結果として
103 が表示される
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/DJYP32N4JM.jpg)

モジュールのインポートの仕組み
関数 foo
import bar でインポート
ファイルに保存された
Python プログラム
（ファイル名：bar.py)
インポート時に，モジュール
を機能させるための変数等が
自動で追加される
__buildins__, __cached__, __doc__,
__file__, __loader__, __name__,
__package__, __spec__ を追加
別のPython
プログラム
と実行結果
print(dir(bar)) で，モジュール bar のアクセス可能
なオブジェクト名（関数名など）が表示される
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/V7N5V8X6E8.jpg)

モジュールの利用例 ①
モジュール
import hoge でインポート
モジュールの動作確
認用のプログラム
import hoge
print(tax(10))
ファイルに保存された
Python プログラム
（ファイル名：hoge.py)
別のPython
プログラム
ソースコード
動作確認結果
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/YJ9Y6K8R73.jpg)

モジュールの利用例 ②
モジュールの機能が大量にあるときなどは，
サブモジュールに分ける場合がある
メインの部分
サブモジュール
（モジュール名 yy）
サブモジュール
（モジュール名 zz）
全体で１つのモジュール
（モジュール名 xx）
インポート
import xx
from xx import yy
from xx import zz
でインポート
別のPython
プログラム
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GJ86ZR8GED.jpg)

２種類のモジュール
• パッケージ化されていないモジュール
モジュール名 bar
ファイルに保存された
Python プログラム
（ファイル名：bar.py)
• パッケージ化されたモジュール
パッケージ化により，配布，インストールが容
易になっている
（詳細割愛）
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/LJL9DKRX7R.jpg)

7-2. 標準ライブラリ
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/47MZP2R3JW.jpg)

Python のライブラリ
• 標準ライブラリの充実．多数の算法（アルゴリズム）が網
羅されている．
• 標準ライブラリのほか，多数のパッケージが有志らにより
制作，配布されている（標準ライブラリで足りない場合，
補える）
• オブジェクト指向の機能を持つ．
データや関数をオブジェクトとして扱えるだけでなく，モ
ジュールもオブジェクトとして簡単に扱うことができる
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/P7R61MRRE9.jpg)

標準ライブラリとその他のパッケージ
インポート
自作の
プログラム
Python の標準機能として
備わっているパッケージ
（標準ライブラリ）
math
import math
import numpy
numpy
など
import tensorflow
インストール
pip install tensorflow
有志らが制作，
配布している
パッケージ
tensorflow
など
Python は，パッケージが豊富であることも，人気の理由
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/PJXMYVRYEX.jpg)

Python の標準ライブラリ
• 公式ドキュメント
https://docs.python.org/ja/3/library/index.html
• 組み込み関数，組み込み定数，組み込み型，組み込み例外，
テキスト処理，バイナリデータ処理，データ型，数値と数
学，関数型プログラミング，ファイルとディレクトリ，
データの永続化，デー圧縮とアーカイブ，ファイルフォー
マット，暗号，オペレーティングシステム，並列実行，コ
ンテキスト変数，ネットワーク通信とプロセス間通信，イ
ンターネット上のデータ操作，HTMLとXML，インター
ネットプロトコルとサービス，マルチメディアサービス，
国際化，プログラムのフレームワーク，グラフィカルユー
ザインタフェース，開発ツール，デバッグとプロファイル，
ソフトウエア・パッケージと配布，Pythonランタイムサー
ビス，カスタム Python インタプリタ，モジュールのイン
ポート，Python 言語サービス，各種サービス
• 多くは「インポート」により使用する
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/3JKG3QR47D.jpg)

7-3. 算法（アルゴリズム）
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LE3NGP8DE5.jpg)

算法（アルゴリズム）の例
５×５×５×５×５×５×５×５×５×５×５×５×５×
５×５×５
は
152587890625
同じ
結果
掛け算: 15 回
掛け算: 4 回
算法（アルゴリズム）の工夫で，掛け算の回数を削減できる場合がある
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/8EDW1LM27G.jpg)

次の２つのプログラムは，同じ答えが出る．
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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/V7P9Q2RLJ8.jpg)

次の２つのプログラムは，同じ答えが出る
a = 10 * 10
b=a*a
c=b*b
print(c)
print(10*10*10*10*10*10*10*10)
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/2JVM5DR6JQ.jpg)

暗号を作成する Python プログラム
Diffie-Hellman法で暗号化（Pythonを使用）
参考ウェブページ
http://nbviewer.jupyter.org/github/yoavram/CS1001.py/blob/master/recitation4.ipynb
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/5EGG6YM2EL.jpg)

暗号を解読する Python プログラム
Diffie-Hellman法の暗号を解読するプログラム
参考ウェブページ
http://nbviewer.jupyter.org/github/yoavram/CS1001.py/blob/master/recitation4.ipynb
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/4JQX4MR9EP.jpg)

暗号作成より，暗号解読の方が手間がかかる
• 暗号解読の算法（アルゴリズム）は発見済み ということが多い
→ プログラムを作成可能
• しかし，プログラムが答えを出すまでに時間がかかる場合がある
すでに，2012 年に，このようなレポートが．
https://www.dit.co.jp/service/security/report/03.html
英大小文字+数字+記号を組み合わせた ZIP のパスワード
６桁の解読時間： ２分２４秒
＝ 超危険
８桁の解読時間： １４日
＝ 危険
１０桁の解読時間： ３４１年
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/K746QVQRE1.jpg)

「計算可能性」
• 算法（アルゴリズム）の作成が不可能という問
題は，すでに発見済みである
人間にもコンピュータにも解けない問題
チューリングマシンの停止判定
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LJ1VP3PVEG.jpg)

全体まとめ
① モジュール
プログラムの共通部分を別ファイルにできる機能．
② 算法（アルゴリズム）
※ コンピュータは，ある定まった手順により問題を解く
プログラムの見通しの良さ，性能向上，バグの防止に役立つ
③ 標準ライブラリ
Python では，標準ライブラリとして math, numpy などのパッ
ケージがあり，さまざまな算法（アルゴリズム）を網羅してい
る
④ 算法（アルゴリズム）を駆使しても， 解くのに時間がかか
りすぎるため難しいという問題がある
30
このことは，暗号の基礎として役立つ


# Page. 31

![Page Image](https://bcdn.docswell.com/page/GJWL2P23E2.jpg)

関連ページ
• 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


