SlideShare a Scribd company logo
1 of 47
1
po-3. 式の抽象化と関
数
金子邦彦
トピックス: 式,変数,式の抽象化と関数,関数
定義,def,関数呼び出し(Python Tutor による演
習)
URL: https://www.kkaneko.jp/pro/po/index.html
(Python プログラミングの基本)
式の抽象化と関数
2
プログラム
実行結果
式「a * 1.1」を含む
関数 foo を定義
実行結果
110.00000000000001
440.00000000000006
は計算誤差を含む
(誤作動やミスではない)
3つの式を1つにまとめる
アウトライン
3
項目
復習
3-1 式,変数
3-2 式の抽象化と関数,関数定義,def
3-3 演習
ソースコード (source code)
• プログラムを,何らかのプログラミング言語で書
いたもの
• 「ソフトウエアの設計図」ということも.
• 人間も読み書き,編集できる
4
import picamera
camera = picamera.PiCamera()
camera.capture("1.jpg")
exit()
Raspberry Pi で,カメラを使って
撮影し,画像を保存するプログラムの
ソースコード(Python 言語)
オブジェクト,変数,メソッド,代入,変数
• オブジェクト:コンピュータでの操作や処理の対象と
なるもののこと
• 変数:名前の付いたオブジェクトには,変数,関数,
モジュールなどがある(変数や関数は,数学の変数や
関数とは違う意味)
• メソッド: オブジェクトに属する操作や処理.メソッド
呼び出しでは,引数を指定することがある.引数(ひ
きすう)は,メソッドに渡す値のこと
Hero.attack("fence", 36, 26)
• 代入:「=」を使用.オブジェクトの値が変化する
b = a + 100
5
メソッドアクセス,代入
• 代入:オブジェクト名 + 「=」
+ 式または値またはメソッド呼び出し
• メソッドアクセス:オブジェクト名 + 「.」
+ メソッド名 +「()」 (引数を付けることも)
6
x = 100
a = x + 200
enermy1 = hero.findNearestEnemy()
hero.attack(enemy1)
Python プログラムの例
Python プログラムでは,その他にも,属性アクセス,関数
呼び出し,制御,「*」, 「+」などの演算子,コマンド,
定義など
Python Tutor の起動
① ウェブブラウザを起動する
② Python Tutor を使いたいので,次の URL を開く
http://www.pythontutor.com/
③ 「Python」をクリック ⇒ 編集画面が開く
7
Python Tutor でのプログラム実行手順
8
(1)「Visualize Execution」をク
リックして実行画面に切り替える
(2)「Last」をクリック.
(3) 実行結果を確認する.
(4)「Edit this code」をク
リックして編集画面に戻る
Python Tutor 使用上の注意点①
• 実行画面で,次のような赤の表示が出ることがある
→ 無視してよい
過去の文法ミスに関する確認表示
邪魔なときは「Close」
9
Python Tutor 使用上の注意点②
「please wait ... executing」のとき,10秒ほど待つ.
→ 混雑しているときは, 「Server Busy・・・」
というメッセージが出ることがある.
混雑している.少し(数秒から数十秒)待つと自
動で表示が変わる(変わらない場合には,操作を
もう一度行ってみる)
10
3-1. 式,変数
11
いまから
行うこと
• Python で,式や変数や計算に
上達する
12
式の実行結果
式の実行結果として,値が得られる
13
プログラム 実行結果
print(100 * 200)
Python の変数
• 変数:名前の付いたオブジェクトには,変数,関
数などがある(変数や関数は,数学の変数や関数
とは違う意味)
• 変数は, 「値をコンピュータに覚えさせておくも
の」として使うことができる
14
変数には,値を代入できる
式
• 式から値が求まる(コンピュータを使って,計算
などができる)
• 式は変数を含むことができる
15
代入
• 代入:プログラムで,「x = 100」のように書く
と,x の値が 100 に変化する
16
プログラム 実行結果
x = 100
演習
資料:18 ~ 21
【トピックス】
• 式と変数
17
18
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
結果の
「300」を確認
① Python Tutor のエディタで次のプログラムを入れ,
実行し,結果を確認する
x = 100
y = 200
print(x + y)
② Python Tutor のエディタで次のプログラムを入れ,
実行し,結果を確認する
19
結果の
「20000」を確認
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
x = 100
y = 200
print(x * y)
③ Python Tutor のエディタで次のプログラムを入れ,
実行し,結果を確認する
20
結果の
「22000」を確認
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
x = 100
y = 200
print((x + 10) * y)
④ Python Tutor のエディタで次のプログラムを入
れ,実行し,結果を確認する
21
結果の
「6.25」を確認
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
底辺が2.5で,高さが5のとき,
三角形の面積は,面積: 6.25
teihen = 2.5
takasa = 5
print(teihen * takasa / 2)
まとめ
• 代入:プログラムで,「x = 100」のように書く
と,x の値が 100 に変化する
• 式の実行結果として,値が得られる
• 式の中に,変数名を書くことができる
22
x = 100
y = 200
print(x + y)
3-2. 式の抽象化と関数,関数定
義,def
23
関数定義
24
• この関数の本体は
「return a * 1.1」
• この関数は,式「a * 1.1」に,名前 foo を付
けたものと考えることもできる
関数
25
• この関数の本体は
「return a * 1.1」
• この関数は,式「a * 1.1」に,名前 foo を付
けたものと考えることもできる
式の抽象化
26
類似した複数の式
変数 a を使って,複数
の式を1つにまとめる
(抽象化)
a * 1.1
100 * 1.1
150 * 1.1
400 * 1.1
100 * 1.1
150 * 1.1
400 * 1.1
変数を含む式
a * 1.1
関数
def foo(a):
return a * 1.1
式
この関数は,式「a *
1.1」に,名前 foo を
付けたものと考えるこ
ともできる
関数
28
類似した複数の式
変数 a を使って,複数
の式を1つにまとめる
(抽象化)
a * 1.1
100 * 1.1
150 * 1.1
400 * 1.1
式「a * 1.1」を含む
関数 foo を定義
関数 foo を使用.
100, 150, 400 は引数
式の抽象化と関数
29
類似した複数の式
関数の定義と使用
同じ
実行結果になる
抽象化前 抽象化後
実行結果
抽象化がなぜ大切なのか
• プログラミングでの根本問題は何でしょうか?
• 誤り(バグ)の無いプログラムの作成
• プログラミングの一番の基礎は何でしょうか?
• 抽象化を行うこと.
• 抽象化により,繰り返し同じことを書くことが減り,
バグを防げる.
• プログラムの変更も簡単に.
30
演習
資料:32
【トピックス】
• 式の抽象化と関数
• 関数定義
• def
31
32
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
Python Tutor のエディタで次のプログラムを入れ,
実行し,結果を確認する
結果を確認
def foo(a):
return a * 1.1
print(foo(100))
print(foo(150))
print(foo(400))
(計算誤差がある.
動作は正常)
「return a * 1.1」の行は字下げが必要
3-3. 関数呼び出し
33
関数呼び出し
34
foo
呼び出され
呼び出し
プログラムは,しばしば,複数の
関数に「分割」される
関数B
関数A
呼び出し
呼び出され
呼び出され
関数呼び出しの例
35
呼び出し
• 関数の中で関数を呼び出す場合
36
def foo(a):
return a * 1.08
def bar(x):
return foo(x) * 100
p = 12
print(bar(p))
p = 20
print(bar(p))
bar の呼び出し
foo の呼び出し
ステップ実行 ステップ実行により、プログラム
実行の流れをビジュアルに観察
37
演習
資料:39 ~ 45
【トピックス】
• 関数呼び出しにおけるジャン
プ
• 関数内で使用される変数が消
えるタイミング
38
① Python Tutor のエディタで次のプログラムを入
れ,実行し,結果を確認する(あとで使うので消
さないこと)
39
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
結果を確認
def foo(a):
return a * 1.1
print(foo(100))
print(foo(150))
print(foo(400))
(計算誤差がある.
動作は正常)
「return a * 1.1」の行は字下げが必要
②「First」をクリックして,最初に戻る
40
③ 「Step 1 of 13」と表示されているので,
全部で,ステップ数は 13 あることが分かる
(ステップ数と,プログラムの行数は違うもの)
41
④ 最初に戻したので
・すべてのオブジェクトは消えている
・赤い矢印は先頭のところに戻っている
42
⑤ ステップ実行したいので,「Next」をクリック
しながら,矢印の動きを確認.
※「Next」ボタンを何度か押し,それ以上進めなく
なったら終了
43
見どころ
foo との間で
ジャンプするところ
⑥ 終わったら,もう一度,「First」をクリックし
て,最初に戻る
44
⑦ もう一度,ステップ実行.
今度は、緑の矢印を見ながら、変数 a が生成、消
去されるタイミングを確認
緑の矢印:いま実行が終わった行
45
関数 foo の実行中は,
変数 a が現れる
全体まとめ
46
プログラム
実行結果
式「a * 1.1」を含む
関数 foo を定義
実行結果
110.00000000000001
440.00000000000006
は計算誤差を含む
(誤作動やミスではない)
3つの式を1つにまとめる
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

More Related Content

Similar to po-3. 式の抽象化と関数

Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Takuya Tsuchida
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドkunihikokaneko1
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3Kenta Hattori
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
symfony 1.2を支えるサブフレームワーク
symfony 1.2を支えるサブフレームワークsymfony 1.2を支えるサブフレームワーク
symfony 1.2を支えるサブフレームワークKatsuhiro Ogawa
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介fukuoka.ex
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】Tomoharu ASAMI
 
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2アルゴリズムとデータ構造2
アルゴリズムとデータ構造2Kenta Hattori
 

Similar to po-3. 式の抽象化と関数 (20)

Functional Way
Functional WayFunctional Way
Functional Way
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
 
pi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッドpi-3. 式の抽象化とメソッド
pi-3. 式の抽象化とメソッド
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
symfony 1.2を支えるサブフレームワーク
symfony 1.2を支えるサブフレームワークsymfony 1.2を支えるサブフレームワーク
symfony 1.2を支えるサブフレームワーク
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
Boost Fusion Library
Boost Fusion LibraryBoost Fusion Library
Boost Fusion Library
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2アルゴリズムとデータ構造2
アルゴリズムとデータ構造2
 
Task
TaskTask
Task
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Python opt
Python optPython opt
Python opt
 

More from kunihikokaneko1

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い kunihikokaneko1
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション kunihikokaneko1
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスkunihikokaneko1
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要 kunihikokaneko1
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門kunihikokaneko1
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスkunihikokaneko1
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 kunihikokaneko1
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタkunihikokaneko1
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンkunihikokaneko1
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線kunihikokaneko1
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システムkunihikokaneko1
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニングkunihikokaneko1
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習kunihikokaneko1
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例kunihikokaneko1
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要kunihikokaneko1
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について kunihikokaneko1
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承kunihikokaneko1
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しkunihikokaneko1
 

More from kunihikokaneko1 (20)

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンス
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョン
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システム
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニング
 
mi-4. 機械学習
mi-4. 機械学習mi-4. 機械学習
mi-4. 機械学習
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要
 
kaneko202304.pptx
kaneko202304.pptxkaneko202304.pptx
kaneko202304.pptx
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について
 
co-3. サブクラス、継承
co-3. サブクラス、継承co-3. サブクラス、継承
co-3. サブクラス、継承
 
co-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出しco-2. メソッド定義と呼び出し
co-2. メソッド定義と呼び出し
 

po-3. 式の抽象化と関数