関数
このノートの問いがそのまま復習カードになり、忘れかけたころに出題されます。
0. どういうまとまりか
関数は、ひとまとまりの処理に名前をつけ、何度でも呼び出せるようにしたものです。
値を受け取り(引数)、処理して、結果を返します(戻り値)。
| もの | 何か | Python での例 |
|---|---|---|
| 組み込み関数 | 最初から用意されている関数 | print・len・int・max |
| ユーザー定義関数 | 自分で定義した関数 | def area(w, h): |
| 引数 | 呼び出すときに関数へ渡す値 | area(3, 4) の 3 と 4 |
| 戻り値 | 関数が呼び出し元へ返す値 | return w * h |
分かれ目は次の 3 つ。
defで定義しただけでは実行されない。呼び出したときに初めて実行される。returnに出会うと、その場で関数を抜けて値を返す。- 関数の中で代入した変数は、その関数の中だけで使える局所変数になる。
1. 関数の定義と呼び出し
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
Python では def 関数名(引数): で関数を定義し、中身を字下げして書きます。
呼び出すときは 関数名(値) と書き、戻り値はそのまま式の中で使えます。
プログラムにおける関数とは何か?
ひとまとまりの処理に名前をつけ、引数を受け取って処理し、結果を戻り値として返せるようにしたもの
一度定義すれば、名前で何度でも呼び出せる。
関数を呼び出すときに渡す値と、関数が返す値を、それぞれ何というか?
引数(渡す値)と戻り値(返す値)
Python では、戻り値は return の後ろに書く。
Python で関数を定義するときに使う語は?
def
def 名前(引数): の後に、字下げして中身を書く。
関数の中で return が実行されると、どうなるか?
return が実行されると、どうなるか?その場で関数の実行を終え、return の後ろの値を呼び出し元へ返す
return より後ろに書いた処理は、そのときは実行されない。
2. 組み込み関数とユーザー定義関数
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
print や len のように最初から使える関数と、自分で def で作る関数があります。
さらに、他の人が作った関数をまとめたもの(ライブラリ・モジュール)を読み込んで使うこともできます。
プログラミング言語に最初から用意されている関数を何というか?
組み込み関数
Python の print(表示)・len(要素の個数)・int(整数に変換)など。自分で作るものはユーザー定義関数。
Python の組み込み関数 len は、配列(リスト)に対して何を返すか?
len は、配列(リスト)に対して何を返すか?要素の個数
len([4, 8, 15]) は 3。最後の要素の添字は、これより 1 小さい。
処理を関数にまとめると、プログラムにどんな利点があるか?
同じ処理を何度でも再利用でき、プログラムの構造の見通しがよくなる
直すときも関数の中を 1 か所直せば済み、誤りを見つけやすい。
3. 局所変数と大域変数
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
関数の中で作った変数は、関数の外からは見えません。関数ごとに変数が分かれているので、
関数の中で同じ名前を使っても、外の変数を壊しません。
関数の中で代入した変数で、その関数の中だけで使えるものを何というか?
局所変数(ローカル変数)
関数の実行が終わると消える。関数の外で代入した変数は大域変数(グローバル変数)。
関数の外で定義され、プログラム全体から参照できる変数を何というか?
大域変数(グローバル変数)
どこからでも書き換えられると誤りの原因を追いにくいので、値は引数と戻り値で受け渡すのが基本。
4. 外部のプログラムとの連携
根拠: 学習指導要領 情報Ⅰ-(3)-ア-(イ)
プログラムは、自分のコンピュータの中の関数だけでなく、ネットワークの向こうのサービスの機能も呼び出せます。
呼び出し方の取り決めが API で、天気・地図・翻訳などのサービスが公開しています。
API とは何か?
あるソフトウェアの機能を、別のプログラムから呼び出して使うための取り決め(窓口)
Application Programming Interface の略。呼び出し方と、受け取る値の形が決まっている。
WebAPI とは何か?
Web のサービスの機能やデータを、ネットワーク(HTTP)を通してプログラムから呼び出せるようにした API
URL に条件をつけて要求を送ると、JSON などの形式で結果が返ってくる。天気予報・地図・郵便番号の検索など。
練習問題
問 1 次のプログラムを実行すると、何と表示されるか。
def f(x):
return x * 2 + 1
print(f(f(3)))
def f(x):
return x * 2 + 1
print(f(f(3)))
15
内側から計算する。f(3) は 3 の 2 倍に 1 を足して 7。次に f(7) は 7 の 2 倍に 1 を足して 15。
問 2 次のプログラムを実行すると、何と表示されるか。
n = 10
def g(n):
n = n + 5
return n
m = g(n)
print(n, m)
n = 10
def g(n):
n = n + 5
return n
m = g(n)
print(n, m)
10 15
関数 g の中の n は、引数として受け取った局所変数で、外の n とは別物。
中で 15 にしても外の n は 10 のまま。戻り値の 15 が m に入る。
問 3 次のプログラムを実行すると、何と表示されるか。
def count_over(data, border):
c = 0
for d in data:
if d >= border:
c = c + 1
return c
print(count_over([3, 8, 5, 10, 7], 7))
def count_over(data, border):
c = 0
for d in data:
if d >= border:
c = c + 1
return c
print(count_over([3, 8, 5, 10, 7], 7))
3
border は 7。7 以上の要素は 8, 10, 7 の 3 つ(>= なので 7 自身も数える)。