0-13では、辞書を使って「名前」と「値」をセットで管理しました。データが増えてくると、同じような処理を何度も書きたくなる場面も増えてきます。
今回学ぶ 関数 は、処理のまとまりに名前をつけて、必要なときに呼び出す仕組みです。あいさつを表示する、合計を計算する、判定結果を返す、といった処理を部品のように再利用できます。

まずはPycoBlocksを開こう
下のPycoBlocksで直接作業するか、別タブで開き、生成されるPythonコードを見ながら進めてください。
| 用語 | 意味 | 例 |
|---|---|---|
def |
関数を定義するキーワード。処理のまとまりに名前をつける | def greet(): |
| 引数(argument) | 関数に渡す値。関数の中で変数として使える | greet("Taro") の "Taro" |
return |
関数の計算結果を呼び出し元へ返すキーワード | return a + b |
| 呼び出し(call) | 定義した関数を実際に実行すること | greet()、add(3, 5) |
ステップ1:関数は「処理に名前をつける」仕組み
関数は def で作ります。def greet(): は「greet という名前の関数を定義する」という意味です。中に書いた処理は、greet() と呼び出したときに実行されます。

def greet():
print("Hello!")
greet()
関数を定義しただけでは、まだ中の処理は動きません。最後の greet() が「呼び出し」です。定義と呼び出しを分けて考えることが、関数の最初のポイントです。
ステップ2:引数で外から値を渡そう
関数には、外から値を渡せます。この値を引数と呼びます。たとえば greet(name) と書くと、呼び出すときに渡した名前を関数の中で使えます。

def greet(name):
print("Hello, " + name)
greet("Taro")
greet("Taro") と呼び出すと、関数の中では name に "Taro" が入った状態になります。同じ関数でも、渡す値を変えれば表示内容を変えられます。
ステップ3:returnで結果を返そう
関数は、計算した結果を呼び出し元に返すこともできます。そのために使うのが return です。表示するだけでなく、「計算結果をあとで使いたい」ときに役立ちます。

def add(a, b):
return a + b
print(add(3, 5))
add(3, 5) は、関数の中で 3 + 5 を計算し、return で 8 を返します。返ってきた値を print() に渡しているので、画面には 8 が表示されます。
ステップ4:関数にするとコードを整理できる
関数のよさは、同じ処理を何度も書かなくてよいことです。たとえば税込価格を計算する処理を関数にしておくと、100円でも250円でも同じ形で計算できます。

def tax_included(price):
return (price * 11) // 10
print(tax_included(100))
print(tax_included(250))
このように、処理に名前をつけると「何をしているコードなのか」が読み取りやすくなります。関数名は、tax_included のように処理の意味が伝わる名前にするとよいです。
コーディングモードで書いてみよう
プログラムが長くなると、入力、計算、判定、表示が1か所に混ざりがちです。関数を使うと、役割ごとにコードを分けられます。
def grade(score):
if score >= 80:
return "A"
elif score >= 60:
return "B"
else:
return "C"
print(grade(75))
ここでは、点数を受け取って評価を返す処理だけを grade() にまとめています。次の0-15では、この return と変数の有効範囲をもう少し詳しく扱います。
関数の中でforループを使う
関数の中で for ループや len() を使うと、リストを受け取って集計する関数を作れます。
def total(numbers):
result = 0
for n in numbers:
result = result + n
return result
scores = [80, 72, 95, 68]
print(total(scores)) # 315
print(total(scores) / len(scores)) # 78.75(平均)
演習課題
課題14-1:あいさつ関数を呼び出そう
Hello! を表示する greet 関数を作り、最後に greet() を呼び出してください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

def greet():
print("Hello!")
greet()
解説: 関数を定義したあと、greet() と書いて呼び出しています。定義だけでは実行されない点に注意してください。
課題14-2:名前を受け取る関数を作ろう
名前を引数として受け取り、Hello, Taro のように表示する greet(name) 関数を作ってください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

def greet(name):
print("Hello, " + name)
greet("Taro")
解説: 呼び出し側で渡した "Taro" が、関数の中では name として使われます。
課題14-3:2つの数を足す関数を作ろう
2つの数 a と b を受け取り、合計を return する add(a, b) 関数を作ってください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

def add(a, b):
return a + b
print(add(3, 5))
解説: return は、計算結果を関数の外へ返します。返ってきた値を print() で表示しています。
課題14-4:税込価格を返そう
価格を受け取り、10%の税込価格を整数で返す tax_included(price) 関数を作ってください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

def tax_included(price):
return (price * 11) // 10
print(tax_included(1200))
解説: // は整数除算(割り算の商の整数部分)を返す演算子です。price × 11 // 10 と書くと、int(price × 1.1) と同じ税込価格(整数)が得られます。計算式を関数にまとめると、別の価格でも同じ処理を使えます。
課題14-5:偶数かどうかを判定しよう
整数 n を受け取り、偶数なら True、奇数なら False を返す is_even(n) 関数を作ってください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

def is_even(n):
return n % 2 == 0
print(is_even(10))
print(is_even(7))
解説: n % 2 == 0 は真偽値を返す式です。0-6で学んだ比較の結果を、そのまま return できます。
課題14-6:リストの平均を返そう
数値のリスト scores を受け取り、平均点を返す average(scores) 関数を作ってください。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

def average(scores):
total = 0
for score in scores:
total = total + score
return total / len(scores)
print(average([80, 90, 70]))
解説: 0-9の for と0-12のリストを組み合わせています。合計を求めてから、要素数 len(scores) で割っています。
まとめ
- 関数は
defで作り、処理のまとまりに名前をつけます - 関数は定義しただけでは動かず、
greet()のように呼び出して実行します - 引数を使うと、関数の外から値を渡せます
returnを使うと、計算結果を関数の外へ返せます- 同じ処理を何度も使う場面では、関数にまとめるとコードを読みやすくできます
次は、関数の return をさらに深く見ながら、変数の有効範囲である「スコープ」を扱います。→ Python × 入門 | #15 戻り値とスコープを理解しよう