Pythonの関数を変数に入れて使う

python3_関数を変数に入れる


今回はPython3の変数に関数を代入して使う方法について学びます。

オブジェクト指向言語のPythonでは関数もオブジェクトです。オブジェクトであるということは、数値や文字列と同じように、関数も変数に代入することができるということです。

関数を変数に入れる

まずは、余計な機能がないシンプルなプログラムを作って、変数に関数を入れるということがどういうことなのかを見てみます。

def say_hello():
    print(‘hello’)

greet = say_hello
greet()

このプログラムでは、helloと表示するだけのsay_hello()という関数を定義しています。
この関数を呼び出したい場合、通常であればsay_hello()を実行するだけです。

しかし、今回は変数greetに関数say_helloを代入し、greet()を実行しています。
関数が代入された変数は、代入された関数と同じように実行することができるのです。

変数に関数を代入した時の注意点

変数に関数を入れて使う時は2つほど注意することがあります。
  1. 変数に関数を代入する時は、関数に()をつけない。上のプログラムでは、変数greetに関数say_helloを代入する時、関数say_helloには()が付いていません。

  2. 変数に代入された関数を実行する時は、変数に()を付ける。上のプログラムでは、関数say_helloを代入した変数greetを関数として実行する時に、いつも関数を使う時と同じように()を付けてgreet()としています。

戻り値がある関数を変数に入れる

戻り値がある関数も変数に入れて使うことができます。戻り値を返す時も基本的な使い方は同じです。まず関数を定義して、その関数を変数に入れて使うだけです。

さっきは、helloと表示するsay_hello()という関数を変数に入れて使いましたが、今度はhelloと表示するのではなく戻り値として返すプログラムを作ってみます。

def get_greeting_msg():
    return ‘hello’

greet = get_greeting_msg
print(greet())

さっきのプログラムとの違いは、helloの表示を関数の中で行うのか戻り値として返してから行うかの違いだけです。

今回作ったget_greeting_msg()は、戻り値としてhelloという文字列を返す関数です。この関数を変数greetに代入してgreet()を実行し、その戻り値をprint()で表示しています。

プログラムとしては何の役にも立たないようなものですが、構造を理解するためになるべくシンプルなプログラムを作ってみるのは有効な方法だと思います。

引数がある関数

今度は引数がある関数の場合を考えます。

def say_hello(name):
    msg = 'Hello {}さん'.format(name)
    print(msg)
    
greet = say_hello
greet('山田')

関数say_hello()は引数nameを受け取り、Hello ◯◯さん と表示します。

この関数を変数greetに代入し、greet()を実行する際に引数として’山田’を渡しています。

その結果、Hello 山田さん と表示されます。

関数を変数に入れると何が便利なのか?

ここまで簡単な例文を見ながら関数を変数に入れて使う方法を学んできました。

では、実際にプログラムを作っている時に、どういう場合に関数を変数に入れて使うのでしょうか?

関数を変数に入れても関数自体の機能は変わりません。一方、変数は自由に名前を作ることができます。つまり、関数を変数に入れることで、同じ機能の関数を色々な名前で使うことができるようになります。

これにより、同じ機能の関数でも用途や使う場所によって名前を変えることができ、コードの可読性を高めることができます。

引数を取る関数にすることで名前によって関数内の処理に違いを出すことも可能です。

同じような関数をいくつも定義するよりも変数に入れて使い回す方がずっと楽ができます。

ただ、関数を変数に入れると、関数を定義する時の名前と実行する時の名前が違うことになるので、変数にどんな関数が入っているのかが分かりにくくならないようにコードを書く必要があります。

以上、Pythonの関数を変数に入れて使う方法でした。


0 件のコメント :