💡 この記事でわかること
- 関数とは何か、なぜ使うのか
- def を使った関数の定義と呼び出し方
- 引数で値を渡す方法と、return で結果を返す方法
- デフォルト引数・キーワード引数の使い方
- 関数の中と外で変数が使える範囲(スコープ)
1. 関数とは?
関数とは、
👉 いくつかの処理をひとまとめにして、名前をつけたものです。
💡 同じような処理を何度も書く代わりに、関数として1回定義しておけば、名前を書くだけで何度でも呼び出せます。コードの重複が減り、修正も1か所で済むようになります。
実は、これまで使ってきたprint()・len()・input()なども、Pythonにあらかじめ用意された関数です。この記事では、それを自分で作る方法を見ていきます。
2. 関数の定義と呼び出し(def)
関数を作ることを「定義する」といい、defを使います。作った関数は、名前のうしろに()を付けて「呼び出す」と実行されます。
def hello():
print("こんにちは")
print("Pythonの関数です")
hello() # ← 呼び出し。ここで中の処理が実行されるdef 関数名():で定義を始める(行末の:を忘れない)- 関数の中身はインデントを1段下げて書く
- 定義しただけでは実行されない。
hello()と呼び出して初めて動く
👉 Pythonの基本文法(インデント・コロンの書き方)についての記事はこちら
3. 引数 — 関数に値を渡す
関数名の()の中に変数名を書くと、呼び出すときに値を渡せます。この受け渡しする値を引数(ひきすう)といいます。
def greet(name):
print(f"こんにちは、{name}さん")
greet("太郎") # こんにちは、太郎さん
greet("花子") # こんにちは、花子さん引数は複数渡すこともできます。その場合はカンマで区切り、書いた順番どおりに対応します。
def introduce(name, age):
print(f"{name}さんは{age}歳です")
introduce("太郎", 20) # 太郎さんは20歳です👉 定義側で受け取る変数を「仮引数」、呼び出し側で実際に渡す値を「実引数」と呼びます。渡す個数が合っていないとエラー(TypeError)になります。
4. 戻り値(return)
returnを使うと、関数の処理結果を呼び出し元に返すことができます。返される値を戻り値といいます。
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 8
print(add(10, 20)) # 30(戻り値を直接使うこともできる)👉 returnが実行されると、そこで関数は終了します。returnのあとに書いた処理は実行されません。
💡 returnを書かない関数は、None(値がないことを表す特別な値)を返します。print()は画面に表示するだけで、戻り値はNoneです。「表示する」と「返す」は別物なので、混同しないよう注意しましょう。
関数の中では、if文やfor文も自由に使えます。
def judge(score):
if score >= 60:
return "合格"
else:
return "不合格"
print(judge(75)) # 合格
print(judge(40)) # 不合格👉 Pythonのif文・for文・while文についての記事はこちら
5. デフォルト引数(省略できる引数)
引数に=で初期値を設定しておくと、呼び出すときにその引数を省略できます。省略された場合は初期値が使われます。
def greet(name, greeting="こんにちは"):
print(f"{greeting}、{name}さん")
greet("太郎") # こんにちは、太郎さん(greetingは初期値)
greet("花子", "おはよう") # おはよう、花子さん👉 デフォルト引数は、必ず通常の引数よりもあとに書きます。def greet(greeting="...", name)のような順番はエラーになります。
6. キーワード引数(名前を指定して渡す)
呼び出すときに引数名=値の形で渡すと、順番を気にせず、どの引数に渡すかを明示できます。
def profile(name, age, city):
print(f"{name} / {age}歳 / {city}")
# 順番どおり(位置引数)
profile("太郎", 20, "東京")
# 名前を指定(キーワード引数)。順番が違ってもよい
profile(city="大阪", name="花子", age=25)💡 引数が多い関数では、キーワード引数で渡すとコードが読みやすくなります。どの値が何を表すのか、呼び出し側を見ただけで分かるためです。
7. 複数の値を返す
returnのうしろに値をカンマで並べると、複数の値をまとめて返せます。受け取る側も、カンマで区切って別々の変数に代入できます。
def min_max(numbers):
return min(numbers), max(numbers)
low, high = min_max([3, 1, 8, 5])
print(low) # 1
print(high) # 88. 変数のスコープ(関数の中と外)
👉 関数の中で作った変数は、その関数の中でしか使えません。この「変数が使える範囲」をスコープといいます。
def calc():
total = 100 # calc の中だけで有効
print(total)
calc() # 100
print(total) # NameError! 関数の外からは total を使えない💡 関数の外に値を持ち出したいときは、グローバル変数に頼らずreturnで返すのが基本です。そうすることで、関数がどこに影響を与えるのかが分かりやすくなり、バグを減らせます。
def calc():
total = 100
return total
result = calc()
print(result) # 1009. 関数まわりの用語まとめ
| 用語 | 意味 |
|---|---|
| 定義(def) | 関数を作ること |
| 呼び出し | 作った関数を実行すること(関数名()) |
| 引数(ひきすう) | 関数に渡す値 |
| 戻り値 | 関数がreturnで返す結果 |
| デフォルト引数 | 省略されたときに使われる初期値 |
| キーワード引数 | 呼び出し時に名前=値で渡す方法 |
| スコープ | 変数が使える範囲(関数の中/外) |
10. まとめ
- def 関数名():で定義し、関数名()で呼び出す
- 引数で値を渡し、returnで結果を返す
- return がない関数は
Noneを返す(「表示」と「返す」は別物) - デフォルト引数で省略可能に、キーワード引数で順番を気にせず渡せる
- 関数の中の変数は外から使えない(スコープ)。持ち出すときは return
👉 「同じコードを2回書きそうになったら関数にする」と意識するだけで、プログラムがぐっと整理されます。まずは引数1つ・return1つの小さな関数から作ってみましょう。