Pythonで釣りゲームを作ろう 基礎編8 関数

2024年04月23日(月)

ある処理を「関数」としてひとつにまとめることで、同じ処理を何度も再利用することができます。関数の使い方をマスターすれば、少ない労力で分かりやすいプログラムを書く事ができます。

1 もくじ

2 関数とは

関数の構造を見ていきましょう。

def lv_up():
  print("テレテレッテッテテー")
  print("レベルが上がった!!")

1行目lv_upの部分を関数名といい、好きに名前をつけることができます。 2~3行目のように、複数の処理を実行するにはそれらの行をインデント(参照)する必要があります。

ここで注意する必要があるのは、上のコードはあくまで関数を定義しただけということです。先ほどのコードを実行してみてください。「レベルが上がった!!」とは出力されません。

定義した関数を実行するには、関数を呼び出す必要があります。次のプログラムをコピー&ペーストして実行してみてください。

def lv_up():
  print("テレテレッテッテテー")
  print("レベルが上がった!!")

lv_up()

実行結果

テレテレッテッテテー
レベルが上がった!!

3 関数と引数

関数には引数(ひきすう)という値を与えることができます。次のプログラムを実行してみてください。

def lv_up(name):
  print(name+"のレベルが上がった!!")

lv_up("勇者")
lv_up("賢者")

実行結果

勇者のレベルが上がった!!
賢者のレベルが上がった!!

引数を複数指定することもできます。,(カンマ)を用いて記述します。

def division(a,b):
  print(str(a)+"÷"+str(b)+"="+str(a//b)+"あまり"+str(a%b))

division(13,3)

実行結果

13÷3=4あまり1

このように、引数を用いることで同じような処理をひとまとめにできます。

4 関数と戻り値

引数は関数に値を与えることができますが、逆に関数から値を受け取ることもできます。それが戻り値です。

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

print(add(5,6))

実行結果

11

少し難しいですが、プログラムを見ながら動作を確認しましょう。

5 ローカル変数とグローバル変数

5.1 ローカル変数

ブロック(インデントされているまとまり)の中で宣言した変数は、他のブロックでは使えません。以下のコードを実行するとエラーになります。

def add(a,b):
    result = a + b

add(1,2)
print(result)
img

関数の中で変数resultを定義しているので、関数の外で変数を参照しようとするとエラーになります。このように、関数の中定義され、関数の中でしか使えない変数のことをローカル変数といいます。

5.2 グローバル変数

この問題を解決するにはresultをグローバル変数にする必要があります。つまり、resultを関数の外で定義すればよいわけです。しかし、ただ関数の外で宣言すればうまくいくかというと、そうではありません。

result = 0
def add(a,b):
    result = a + b

add(1,2)
print(result)

実行結果

0

この場合でも、関数の中のresultと、関数の外のresultは違うものだとみなされてしまいます。関数の中のresultがグローバル変数であることを明記しなけれまなりません。n個のグローバル変数を利用したいとき、関数の初めに以下の形式で記述します。

global 変数名1,変数名2,...,変数名n

これを用れば、うまく変数の中身を受け渡せるようになります。

result = 0
def add(a,b):
  global result
    result = a + b

add(1,2)
print(result)

実行結果

3