Python入門 - 関数
関数を使う
プログラムをしていると、同じような処理を何度も使うシーンが出てきます。
サンプルコード
print('process A')
print('process B')
print('process C')
print('process A')
print('process B')
print('process C')
実行結果
process A
process B
process C
process A
process B
process C
このように、何かひとまとまりの処理を何度か使うような場合、「関数」にすることで、便利に使うことができます。
サンプルコード
def funcTest():
print('process A')
print('process B')
print('process C')
funcTest()
funcTest()
実行結果
process A
process B
process C
process A
process B
process C
関数の最も基本的な書き方は、以下のようになります。
また、関数を使うことを「関数を呼び出す」と言ったりもします。
def 関数名():
実行したい処理
実行したい処理
・・・
引数
関数を呼び出すときに、関数内で使うオブジェクトを関数に渡すことができます。つまり、渡すオブジェクトによって関数の処理を変えることができます。
次のサンプルを見てみましょう。
サンプルコード
def funcTest(value):
if(value < 0):
print('do not calc')
else:
print('calc')
print(10 * value - 5)
funcTest(5.5)
funcTest(-3)
実行結果
calc
50.0
do not calc
このように、関数に渡すオブジェクトのことを「引数(ひきすう)」と言います。聞きなれない言葉だと思いますが、「ふーん、そういう用語なんだ」と考えておけばいいと思います。
引数は、たくさん渡すこともできます。
サンプルコード
def funcTest(value, a, b):
if(value < 0):
print('do not calc')
else:
print('calc')
print(a * value - b)
funcTest(5.5, 10, -5)
funcTest(30, -5.5, 10)
実行結果
calc
60.0
calc
-175.0
引数には、どのようなオブジェクトでも渡すことができます。しかし、正しく処理できないオブジェクトを渡すと、プログラムを実行したときにエラーになってしまいます。
サンプルコード
def funcTest(value, a, b):
if(value < 0):
print('do not calc')
else:
print('calc')
print(a * value - b)
funcTest(5.5, '10', -5)
実行結果
calc
Traceback (most recent call last):
File "XXXX.py", line 9, in
funcTest(5.5, '10', -5)
File "XXXX.py", line 7, in funcTest
print(a * value - b)
TypeError: can't multiply sequence by non-int of type 'float'
「ファイルXXXX.pyの9行目の"funcTest(5.5, '10', -5)"の中の、"print(a * value - b)"でエラーが発生した」という話の後に、「can't multiply sequence by non-int of type 'float」 ということで、掛け算ができないよというエラー内容になります。
関数の引数は正しく処理できるものを渡すようにしましょう。(ただし、実行中にエラーが発生した場合の対策として、例外処理があります。別の記事で解説することになると思います)
return文
今まで見てきた関数のサンプルでは、一度関数の処理が終わると、元の処理にただ戻るだけでした。しかし、関数で処理した結果を元の処理に返したいシーンもあります。j例えば、ある計算をする関数で、計算結果を元の処理に返したいような場合です。
Pythonではreturn文を使うことで、オブジェクトを返すことができます。
サンプルコード
def funcTest(value, a, b):
print('calc')
ret = a * value - b
return ret
ret = funcTest(10, 5, -3.3)
print(ret)
実行結果
calc
53.3
このように、関数から返ってきたオブジェクトのことを「返り値」とか、「戻り値」と呼びます。
もし、いくつかのオブジェクトを返したいときは、タプルを利用することを検討して見ましょう。
サンプルコード
def funcTest(value, a, b):
print('calc')
ret1 = a * value - b
ret2 = b * value + a
return (ret1, ret2)
ret = funcTest(10, 5, -3.3)
print(ret)
実行結果
calc
(53.3, -28.0)
それでは、最後に関数の書き方をまとめておきます。
def 関数名(引数1, 引数2, ・・・):
実行したい処理
実行したい処理
・・・
return 返り値