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
関数名の()なしは関数ポインタとなり変数に代入するとその変数を関数として使えます。