まず結論

引数は、関数に渡す値です。

def greet(name):
    print(name + "さん、こんにちは")

greet("モコ")

このコードでは、"モコ"name に入ります。

引数は、関数の中で使うために外から渡す値です。

イメージで考える

関数は、小さな作業台のようなものです。

呼び出し側の greet("モコ") は、作業台に "モコ" という材料カードを渡します。

受け取った材料カードは、関数の中では name という名前で使われます。

呼び出し側と def 側を、材料を渡す入口として見比べると読みやすいです。

def側の名前に値が入る

関数を呼ぶとき、渡した値が def 側の名前に入ります。

def double(number):
    return number * 2

result = double(5)
print(result)

double(5) と呼ぶと、number5 が入ります。
そのため、結果は 10 になります。

引数があると使い回せる

引数を使うと、同じ関数を別の値で使えます。

def greet(name):
    print(name + "さん、こんにちは")

greet("モコ")
greet("ソラ")

関数の中身を何度も書かなくて済みます。

引数が2つある場合

引数は複数にできます。

def add(a, b):
    return a + b

print(add(2, 3))

a2b3 が入ります。

よくあるエラー

必要な引数を渡し忘れるとエラーになります。

def greet(name):
    print(name + "さん")

greet()

関数が name を必要としているのに、呼び出し側で値を渡していないためです。

読み方のコツ

関数を読むときは、呼び出し側と定義側を対応させます。

greet("モコ")
def greet(name):

この2行を見比べて、「name"モコ" が入る」と読むと分かりやすくなります。

手を動かすミニ練習

関数に渡す名前を変えて、表示がどう変わるか試しましょう。

def greet(name):
    print(name + "さん、こんにちは")

greet("モコ")
greet("Python")

呼び出すときに渡した値が、関数の中の name に入ります。