po-3. 式の抽象化と関数
トピックス： 式，変数，式の抽象化と関数，関数定義，def，関数呼び出し（Python Tutor による演習）
URL: https://www.kkaneko.jp/pro/po/index.html（Python プログラミングの基本）

金子邦彦
1

式の抽象化と関数

プログラム

実行結果

実行結果
３つの式を１つにまとめる

式「a * 1.1」を含む
関数 foo を定義

110.00000000000001
440.00000000000006
は計算誤差を含む（誤作動やミスではない）2

アウトライン

3-1
3-2
3-3

項目
復習
式，変数
式の抽象化と関数，関数定義，def
演習

3ソースコード (source code)• プログラムを，何らかのプログラミング言語で書いたもの• 「ソフトウエアの設計図」ということも．
•

人間も読み書き，編集できる

import picamera
camera = picamera.PiCamera()camera.capture("1.jpg")
exit()Raspberry Pi で，カメラを使って撮影し，画像を保存するプログラムのソースコード（Python 言語）

4オブジェクト，変数，メソッド，代入，変数• オブジェクト：コンピュータでの操作や処理の対象となるもののこと• 変数：名前の付いたオブジェクトには，変数，関数，モジュールなどがある（変数や関数は，数学の変数や関数とは違う意味）• メソッド: オブジェクトに属する操作や処理．メソッド呼び出しでは，引数を指定することがある．引数（ひきすう）は，メソッドに渡す値のこと
Hero.attack("fence", 36, 26)• 代入：「=」を使用．オブジェクトの値が変化する
b = a + 100

5メソッドアクセス，代入
Python プログラムの例

x = 100
a = x + 200
enermy1 = hero.findNearestEnemy()
hero.attack(enemy1)• 代入：オブジェクト名 ＋ 「=」＋ 式または値またはメソッド呼び出し• メソッドアクセス：オブジェクト名 ＋ 「.」＋ メソッド名 ＋「()」 （引数を付けることも）Python プログラムでは，その他にも，属性アクセス，関数呼び出し，制御，「*」, 「+」などの演算子，コマンド，定義など

6

Python Tutor の起動① ウェブブラウザを起動する② Python Tutor を使いたいので，次の URL を開く

http://www.pythontutor.com/③ 「Python」をクリック ⇒ 編集画面が開く

7

Python Tutor でのプログラム実行手順(1)「Visualize Execution」をクリックして実行画面に切り替える(2)「Last」をクリック．

(4)「Edit this code」をク(3) 実行結果を確認する．
8
リックして編集画面に戻る

Python Tutor 使用上の注意点①• 実行画面で，次のような赤の表示が出ることがある →無視してよい過去の文法ミスに関する確認表示
邪魔なときは「Close」

9Python Tutor 使用上の注意点②「please wait ... executing」のとき，１０秒ほど待つ．

混雑しているときは， 「Server Busy・・・」→というメッセージが出ることがある．

混雑している．少し（数秒から数十秒）待つと自動で表示が変わる（変わらない場合には，操作をもう一度行ってみる）

10

3-1. 式，変数11

いまから行うこと• Python で，式や変数や計算に上達する

12

式の実行結果
式の実行結果として，値が得られる

print(100 * 200)
プログラム

実行結果

13

Python の変数• 変数：名前の付いたオブジェクトには，変数，関数などがある（変数や関数は，数学の変数や関数とは違う意味）• 変数は， 「値をコンピュータに覚えさせておくもの」として使うことができる

変数には，値を代入できる

14

式• 式から値が求まる（コンピュータを使って，計算などができる）• 式は変数を含むことができる

15

代入• 代入：プログラムで，「x = 100」のように書くと，x の値が 100 に変化する

x = 100
プログラム

実行結果

16

演習

資料：18 ～ 21

【トピックス】• 式と変数17

① Python Tutor のエディタで次のプログラムを入れ，実行し，結果を確認する

x = 100
y = 200print(x + y)
結果の「300」を確認「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

18

② Python Tutor のエディタで次のプログラムを入れ，実行し，結果を確認する

x = 100
y = 200print(x * y)
結果の「20000」を確認「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

19

③ Python Tutor のエディタで次のプログラムを入れ，実行し，結果を確認する

x = 100
y = 200print((x + 10) * y)
結果の「22000」を確認「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

20

④ Python Tutor のエディタで次のプログラムを入れ，実行し，結果を確認する
底辺が２．５で，高さが５のとき，三角形の面積は，面積： ６．２５
teihen = 2.5
takasa = 5
print(teihen * takasa / 2)
結果の「6.25」を確認「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

21

まとめ• 代入：プログラムで，「x = 100」のように書くと，x の値が 100 に変化する• 式の実行結果として，値が得られる• 式の中に，変数名を書くことができる

x = 100
y = 200
print(x + y)22

3-2. 式の抽象化と関数，関数定義，def23

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

24

関数

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

25

式の抽象化
100 * 1.1
150 * 1.1
400 * 1.1

類似した複数の式

a * 1.1
変数 a を使って，複数の式を１つにまとめる
（抽象化）

26

式
100 * 1.1
150 * 1.1
400 * 1.1

変数を含む式関数a * 1.1

def foo(a):return a * 1.1
この関数は，式「a *1.1」に，名前 foo を付けたものと考えることもできる

関数
100 * 1.1
a * 1.1
150 * 1.1
400 * 1.1
類似した複数の式

変数 a を使って，複数の式を１つにまとめる（抽象化）式「a * 1.1」を含む
関数 foo を定義
関数 foo を使用．
100, 150, 400 は引数

28

式の抽象化と関数
抽象化前

抽象化後

類似した複数の式関数の定義と使用

実行結果同じ実行結果になる

29

抽象化がなぜ大切なのか• プログラミングでの根本問題は何でしょうか？
• 誤り（バグ）の無いプログラムの作成• プログラミングの一番の基礎は何でしょうか？
• 抽象化を行うこと．
• 抽象化により，繰り返し同じことを書くことが減り，バグを防げる．
• プログラムの変更も簡単に．

30

演習

資料：32

【トピックス】• 式の抽象化と関数• 関数定義• def

31

Python Tutor のエディタで次のプログラムを入れ，実行し，結果を確認する

def foo(a):return a * 1.1
print(foo(100))print(foo(150))
print(foo(400))

結果を確認（計算誤差がある．
「return a * 1.1」の行は字下げが必要動作は正常）「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

32

3-3. 関数呼び出し33

関数呼び出し

呼び出し

呼び出されfoo34

関数呼び出しの例
呼び出し
呼び出され 関数Ａ

呼び出し
呼び出され 関数Ｂ

プログラムは，しばしば，複数の関数に「分割」される
35

• 関数の中で関数を呼び出す場合
def foo(a):return a * 1.08
def bar(x):return foo(x) * 100
p = 12print(bar(p))
p = 20
print(bar(p))

foo の呼び出しbar の呼び出し

36

ステップ実行ステップ実行により、プログラム実行の流れをビジュアルに観察37

演習
資料：39 ～ 45
【トピックス】• 関数呼び出しにおけるジャンプ• 関数内で使用される変数が消えるタイミング38

① Python Tutor のエディタで次のプログラムを入れ，実行し，結果を確認する（あとで使うので消さないこと）
def foo(a):return a * 1.1
print(foo(100))print(foo(150))
print(foo(400))

結果を確認（計算誤差がある．
「return a * 1.1」の行は字下げが必要動作は正常）「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

39

②「First」をクリックして，最初に戻る

40

③ 「Step 1 of 13」と表示されているので，全部で，ステップ数は 13 あることが分かる（ステップ数と，プログラムの行数は違うもの）

41

④ 最初に戻したので・すべてのオブジェクトは消えている・赤い矢印は先頭のところに戻っている42

⑤ ステップ実行したいので，「Next」をクリックしながら，矢印の動きを確認．
※「Next」ボタンを何度か押し，それ以上進めなくなったら終了

見どころ
foo との間でジャンプするところ

43

⑥ 終わったら，もう一度，「First」をクリックして，最初に戻る

44

⑦ もう一度，ステップ実行．
今度は、緑の矢印を見ながら、変数 a が生成、消去されるタイミングを確認
緑の矢印：いま実行が終わった行関数 foo の実行中は，変数 a が現れる

45

全体まとめ

プログラム

実行結果

実行結果
３つの式を１つにまとめる

式「a * 1.1」を含む
関数 foo を定義

110.00000000000001
440.00000000000006
は計算誤差を含む（誤作動やミスではない）46

Python 関連ページ• Python まとめページ
https://www.kkaneko.jp/tools/man/python.html• Python 入門（スライド資料とプログラム例）
https://www.kkaneko.jp/pro/pf/index.html• Python プログラミングの基本（スライド資料とプログラム例）
https://www.kkaneko.jp/pro/po/index.html• Python プログラム例
https://www.kkaneko.jp/pro/python/index.html• 人工知能の実行（Google Colaboratory を使用）
https://www.kkaneko.jp/ai/ni/index.html• 人工知能の実行（Python を使用）（Windows 上）
https://www.kkaneko.jp/ai/deepim/index.html

47