3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Python】辞書を利用して関数をまとめて実行する

Posted at

Pythonの関数と辞書のを使い方を新たに知ったのでまとめます。
こういうことができる、という一例なのでかなり遠回りなコードになると思います。

やりたいこと

func.py
def self_introduction(name: str, age: int, hobby: str) -> str:
    """
    名前、年齢、趣味の自己紹介
    """
    return '私の名前は{}、{}才。趣味は{}です。' .format(name, age, hobby)


def cal_bmi(weight: int, height: int) -> int:
    """
    bmiを計算して返す関数
    """
    return weight / (height ** 2)

上のような引数を結合して文字列を返すだけの関数と、よくある体重と身長からbmiを計算し返す関数を書いたファイルfunc.pyを用意します。これを別ファイルから参照し利用することを考えます。

func_excu.py
import func as fn

intro = fn.self_introduction('diagonal-m', 23, '読書')
print('自己紹介:', intro)

bmi = fn.cal_bmi(60, 170)
print('bmi:', bmi)
実行結果
自己紹介: 私の名前はdiagonal-m、23才。趣味は読書です。
bmi: 0.0020761245674740486

これと同じ結果になるようなものを辞書を利用して書いていきます。

辞書を利用して関数を呼び出す

dict_excu.py
import func as fn

func_dict = {
    '自己紹介': {
        'func': fn.self_introduction,
        'args': {
            'name': 'diagonal-m',
            'age': 23,
            'hobby': '読書',
        }
    },
    # 以下のように短く書くこともできる
    'bmi': dict(func=fn.cal_bmi, args=dict(weight=60, height=175))
}

for func_name, func_cont in func_dict.items():
    result = func_cont['func'](**func_cont['args'])
    print(f'{func_name}: {result}')

実行結果
自己紹介: 私の名前はdiagonal-m、23才。趣味は読書です。
bmi: 0.0019591836734693877

func_dictにキーに'自己紹介'、さらに辞書を値として'func'をキーに、関数型を値とした辞書と、'args'をキーにそれぞれさらに引数を値にとった辞書型で設定しています。'bmi'の方も同様のことをしています。

このようにfor文で一括で実行することができます。

補足

def cal_bmi(weight: int, height: int) -> int:
    """
    bmiを計算して返す関数
    """
    # return weight / (height ** 2)
    print(weight / (height ** 2))

if __name__ == "__main__":
    cal_bmi(60, 170)  
	print(cal_bmi) # 関数名の()なしは関数ポインタとなる
	x = cal_bmi
	print(type(x))
	x(60, 170)
	x(90, 150)
実行結果
0.0020761245674740486
<function cal_bmi at 0x00000252C8969D90>
<class 'function'>
0.0020761245674740486
0.004

関数名の()なしは関数ポインタとなり変数に代入するとその変数を関数として使えます。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?