Python × 入門 | #14 関数を作ろう

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 です。表示するだけでなく、「計算結果をあとで使いたい」ときに役立ちます。

returnで計算結果を返す
def add(a, b):
    return a + b

print(add(3, 5))

add(3, 5) は、関数の中で 3 + 5 を計算し、return8 を返します。返ってきた値を 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つの数 ab を受け取り、合計を 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 戻り値とスコープを理解しよう

PAGE TOP