関数
関数とは、ある処理をまとめたプログラムの塊で、printも関数の1つです。
本来、コンソールに文字を出力するには色々なコードを書く必要がありますが、printという関数のおかげでprintと書くだけで良いようになっています。
関数は自分で作ることができます。関数はdef 関数名():
と記述することで定義できます。
関数は定義しただけでは実行されないので、呼び出す必要があります。
呼び出し方は関数名()
と記述することで呼び出せます。
※ただし、関数は定義した後でしか呼び出せないので注意が必要です。
def hello():
print('Hello')
hello()
Hello
と記述することで、まずdef hello():
と関数を定義し、関数の処理の内容はインデントをして書いています。
その後、hello()
で関数を呼び出すことで、関数が実行されます。
引数
関数を呼び出す際に、関数に値を渡すことができます。この値のことを**引数
と呼びます。
引数を渡すと関数の中でその値を利用することができます。
関数に引数を渡せることで、その値によって関数の処理の結果を変えることができます。
関数に引数を渡すには、引数を受け取れる関数を定義しなければなりません。
その為に、関数の定義部分で、引数を受け取る変数仮引数
**を指定します。
次に関数に引数を渡すには、関数名(引数)
として関数を呼び出します。渡された引数は、関数の仮引数に代入され、その値を関数の処理の中で用いることができます。
def 関数名(仮引数):
実行する処理
関数名(引数)
⬇
def hello(name):
print('Hello ' + name)
hello('Abe')
Hello Abe
と記述することで引数を渡し、その値を関数の処理の中で用いることができます。
仮に引数を変更した場合、「hello('Sato')
」であれば出力結果は「Hello Sato
」となります。
このように関数に引数を渡せることで、その値によって関数の処理の結果を変えることができます。
複数の引数を持つ関数
引数は複数渡すことができます。複数の引数を受け取るためには仮引数を「,(コンマ)」で区切って定義します。
引数は左から順に「第1引数, 第2引数...」と呼びます。
def hello(name, message):
print(name + 'さん、' + message) # print(f"{name}さん、{message}")と記述しても同様に表示されます
hello('Abe', 'おはよう')
Abeさん、おはよう
と記述することで、複数の引数を渡すことができます。
しかし、引数をの順番は、対応する仮引数の順番と同じにする必要があります。
引数の初期値
引数には初期値を設定できます。
引数が省略された時、初期値が与えられていれば代わりの値として初期値が使われます。
def hello(name, message = 'こんばんは'):
print(name + 'さん、' + message)
hello('Abe', 'おはよう')
hello('Abe')
Abeさん、おはよう
Abeさん、こんばんは
上記のように、仮引数message
に初期値message = 'こんばんは'
と設定することで、第2引数が省略されていても初期値が使われます。
スコープ
変数には、その変数が使える範囲が存在します。その範囲のことを**スコープ
**と呼びます。
仮引数や関数の中で定義した変数のスコープは関数の中だけとなります。
よって、その変数を関数の外で使うことはできません。
def hello(name):
print(name) # 変数nameのスコープ(変数nameはこの関数内のみ使える)
hello('Abe')
print(name) # 変数nameのスコープの外(変数nameは関数の外なので使えません。よってエラーが出ます)
Abe
︙
NameError: name 'name' is not defined
上記のように、関数内では変数nameは使用できました。
しかし関数の外でも変数nameを使用しようとしましたが、変数nameのスコープの外であったため、使用できませんでした。エラー文を見ても分かるように、スコープの外で使用しようとしたnameは定義されていませんというエラー文が表示されました。