【Python】かんたんな関数の書き方、引数と戻り値【入門第24回】

110, 2019-08-17

目次

関数とは?

こんにちは、narupoです。

今回はPythonの関数をやります。
関数とは一体何なのか?
関数とは、よくある処理をまとめる機能です。
この関数を使えるようになると、小規模以上のプログラムが書けるようになります。
将来的に自分でアプリなどを作りたい場合は必須の機能なので、この記事で覚えるようにしましょう。

具体的には↓を見ていきます。

  • 関数の役割

  • 関数の形

  • 関数名

  • 引数

  • 戻り値

関数の役割

さっきも書きましたが、関数とはよくある処理をまとめる機能でした。
これはどういうことなのか?

具体例を見てみたいと思います。

たとえば↓のようなコードがあったとします。

:::python
print('我々は')
print('宇宙人です')

print('我々は')
print('宇宙人です')

「我々は」「宇宙人です」とそれぞれ2回出力してますが、「我々は」「宇宙人です」をひとつにまとめることができたら、コードがもっと小さくなります。
こういう場合は↓のようにして関数を作って、処理をまとめます。

:::python
def we_are_alien():
    print('我々は')
    print('宇宙人です')

we_are_alien()
we_are_alien()

↑のwe_are_alienというのが関数です。
def we_area_alien():というところで関数を作って、we_are_alien()というところで関数を呼び出しています。
このように、関数というのは「作って、呼び出す」というのがセットになっています。
関数は作るだけだと意味が無いのです。呼び出す必要があります。

では、この関数を作るという点をもう少し詳しく見てみたいと思います。

関数の形

まず関数の作り方、定義の方法についてです。
関数は↓のように作ります。

def 関数名(引数, 引数, ...):
    実行内容

defと書いて関数名、それからカッコで引数を囲ってコロン(:)、そしてインデントして実行内容を書きます。
↑の内、引数, 引数, ...は省略することができます。
よって関数は↓のように作ることができます。

:::python
def myfunc():
    print('私の関数です')

↑の関数を呼び出すには↓のようにします。

:::python
myfunc()

↑のコードの実行結果は↓のようになります。

私の関数です

ちなみにmyfuncというのはmy functionの略で、functionは関数のことです。
この時、関数名は自由に名付けることができます(といっても決まりはありますが)。

関数名

関数名についてですが、関数名に使える文字は決まっています。
使える文字は↓の通りです。

  • 小大文字の英字

  • アンダーバー(_)

  • 数字

↑の内、名前を数字で始めることはできません。
なので↓のような関数名になります。

:::python
my_func
myFunc
My_Func
myfunc_123
_myfunc

関数名には日本語も使うことが出来るんですが、あまり一般的ではありません。
最初は英字の関数名に慣れるようにするといいでしょう。

引数

【壁紙】無数の気球

もう一度、関数の形を見てみましょう。

def 関数名(引数, 引数, ...):
    実行内容

↑の内、引数(ひきすう)というのはどういうものなのか?
引数とは、関数の呼び出し時に渡せる値です。
たとえば↓のような関数を作ります。

:::python
def myfunc(arg):
    print(arg)

カッコの中のargというのが引数です。
その引数をprintで出力していますね。
これはこの関数の呼び出しとセットで見るとわかりやすいです。
たとえば↓のようなケースです。

:::python
def myfunc(arg):
    print(arg)

myfunc(123)

myfunc関数を呼び出すときに、カッコの中に123と書いていますが、これが引数で、関数内ではargになります。

実引数と仮引数

正確には関数の呼び出し時の引数を実引数(↑の例では123)と言い、関数の引数を仮引数(↑の例ではarg)と言います。
ここでは両方とも引数と呼んでいます。

関数を呼び出すときに渡している123という値は、関数の引数argに入ります。
よって、print(arg)では123と出力されます。
argには123という値が入っているからですね。

引数の数は増やすことができます。
増やしても基本的には変わりません。
たとえば↓のような関数を見てみます。

:::python
def myfunc(arg1, arg2):
    print(arg1, arg2)

myfunc(123, 456)

↑のコードの実行結果は↓のようになります。

123 456

myfunc(123, 456)というところに注目してください。
ここはmyfunc関数を呼び出しているところです。
このとき、カッコの中に123, 456という風に引数を渡しています。
このように関数の呼び出しではカンマ(,)で区切って複数の引数を渡すことができます。
引数はカンマで区切られているので、123456というのはそれぞれ別の引数です。
この2つの引数は123arg1に、456arg2に入ります。

:::python
def myfunc(arg1, arg2):
    ...

つまり、関数呼び出しのときに渡した引数の順番が、そのまま関数の引数の順番になるわけですね。
なので↓のようにすると、

:::python
myfunc(456, 123)

456arg1に、123arg2に入ります。

引数名

引数名は自由に決めることができます。
自由と言っても、引数名で使える文字は決まっています。
↓の通りです。

  • 小大文字の英字

  • アンダーバー(_)

  • 数字

引数名を数字で始めることは出来ません。
また、日本語で引数名を書くことも出来ますが、あまり一般的ではありません。

ちなみにargというのはargumentの略で、意味は「引数」です。

戻り値

関数から値を得ることも出来ます。
たとえば↓のコードを見てみましょう。

:::python
def myfunc():
    return 1

result = myfunc()
print(result)

↑のコードの実行結果は↓のようになります。

1

このとき、関数から得られた値を戻り値と言います。
まず関数の中身を見てみます。

:::python
def myfunc():
    return 1

returnというのがreturn文と呼ばれる、関数から値を返す文です。
return 1としているので、この関数myfuncは整数1を返します。

この関数の戻り値を受け取るには↓のようにします。

:::python
result = myfunc()

myfunc関数を呼び出して、左辺のresult変数に戻り値を入れています。
よって変数resultには1が入ります。

そのあとresultprintで出力しているので出力結果は1になるわけです。

return文

return文というのは関数などから値を戻す文です。
このreturn文が実行されると、その時点で関数は終了します。
たとえば↓のようなケース。

:::python
def myfunc():
    return 1
    print('この処理は呼ばれません')

↑のコード、関数内のprintは実行されません。
printの前にreturn文が実行されているからです。

また、return文は値を省略することも出来ます。
たとえば↓のようにです。

:::python
def myfunc():
    return

この場合、関数myfuncの戻り値はNoneになります。
Noneについては↓の記事を参照してください。

Noneは何もない状態を表すオブジェクトでした。
つまり関数の戻り値は「ない」ということになりますね。
実際にはNoneというオブジェクトを関数myfuncは返しているので、「ない」というのはおかしいんですが、表現的には「この関数の戻り値はない」と表現します。

↑の関数を呼び出して↓のように戻り値を受け取っても、

:::python
result = myfunc()
print(result)

結果はNoneになります。

None

たとえば、↓のようにそもそもreturn文を省略している関数も戻り値はNoneになります。

:::python
def myfunc():
    print('戻り値はNoneです')

サンプルコード

今まで紹介した関数の機能を使ったサンプルコードです。

:::python
def mul(x, y):
    return x * y

result = mul(2, 3)
print(result)

↑のコードの関数mulは引数xyを乗算して戻り値を返します。
その戻り値をprintで出力しているので、実行結果は6になります。

おわりに

関数を使えるようになるとプログラミングが楽になります。

おぼえるっきゃない

関数にはまだまだ機能があるのですが、今回はとりあえず最低限の機能をまとめました。
次回に続きます。

関連動画