Q1次のコードの出力はどれですか?def f(x, y=10):
return x + y
print(f(3))
def で関数を定義する — 引数・戻り値・デフォルト/キーワード引数
Python の関数定義 def の基本を学びます。def と return の書き方、呼び出し側からの引数、デフォルト引数、キーワード引数まで一通り図解で押さえます。
同じ処理を何度も使用する場合には、処理に名前を付けて、使いたい場所から何度も呼び出せるようにします。その仕組みが関数で、def キーワードで定義します。
関数を使えば、共通処理を 1 箇所にまとめられ、使う側は呼び出し 1 行で済みます。ここまでで使ってきた print() / len() / int() / sum() なども、すべて関数です。
def と return の基本
関数は def 関数名(引数): で定義し、中身をインデントで書きます。呼び出し側に値を返すには return 値 を使います。return が書かれていない関数は None を返す扱いになります。
引数は関数を呼び出すときに渡す値、戻り値は関数が return で返す値です。同じ関数でも引数を変えれば結果が変わるため、1 つの定義を使い回すことができます。
# 引数なし、戻り値なし
def print_hello():
print("Hello World")
print_hello() # Hello World
# 引数 2 つ、戻り値 1 つ
def max_num(a, b):
if a >= b:
return a
return b
result = max_num(30, 20)
print(result) # 30
# return で関数が抜けるので、それ以降のコードは実行されない
def check(x):
if x < 0:
return "negative"
return "non-negative"
print(check(-5)) # negative
デフォルト引数とキーワード引数
引数に = 値 を付けておくと、呼び出し側が省略したときの初期値を設定できます(デフォルト引数)。
また呼び出し時に 引数名=値 の形で渡すと、位置に関係なく値を渡せます(キーワード引数)。デフォルト引数は、順序の影響を受けないように引数リストの後方に置くのが習慣です。
# greeting にデフォルト値を持たせる
def greet(name, greeting="こんにちは"):
return f"{greeting}、{name}さん"
print(greet("田中")) # こんにちは、田中さん
print(greet("山田", "おはよう")) # おはよう、山田さん
print(greet(greeting="こんばんは", name="佐藤")) # キーワード指定で順序を入れ替え
# 出力: こんばんは、佐藤さん
この記事では、def による関数定義、return での戻り値、デフォルト引数・キーワード引数を学びました。関数を使いこなせるようになると、同じ処理を別の場所で何度でも呼べるようになり、コードの可読性が向上します。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2次のうち、キーワード引数で呼び出しているものはどれですか?def greet(name, greeting="Hi"):
return f"{greeting}, {name}"
Q3次のコードを実行したときの結果として正しいものはどれですか?def g(x):
x + 1 # return なし
result = g(10)
print(result)