大規模なプログラムの開発をしていると関数の数が増えて複雑さも増すため、どこからどの関数が呼ばれてどんな処理をしているのか、分かりづらくなってきます。inspectモジュールのcurrentframeを使って工夫すると関数名やクラス名を強調表示し、ログを見やすくすることができます。
サンプルコード
import inspect
def add(a, b):
# 関数名表示(start)-------------------------------
func_name = inspect.currentframe().f_code.co_name
print('\n' + '-' * len(func_name))
print(func_name)
print('-' * len(func_name))
# -----------------------------------------------
print('hello')
c = a + b
print('a={0},b={1},c={2}'.format(a, b, c))
# 関数名表示(end)---------------------------------
func_name_end = func_name + '(end)'
print('-' * len(func_name_end))
print(func_name_end)
print('-' * len(func_name_end) + '\n')
# -----------------------------------------------
def multiply(a, b):
# 関数名表示(start)-------------------------------
func_name = inspect.currentframe().f_code.co_name
print('\n' + '-' * len(func_name))
print(func_name)
print('-' * len(func_name))
# -----------------------------------------------
print('hello')
c = a
print('a={0},b={1},c={2}'.format(a, b, c))
# 関数名表示(end)---------------------------------
func_name_end = func_name + '(end)'
print('-' * len(func_name_end))
print(func_name_end)
print('-' * len(func_name_end) + '\n')
# -----------------------------------------------
if __name__ == '__main__':
add(1, 2)
multiply(1, 2)
実行結果
---
add
---
hello
a=1,b=2,c=3
--------
add(end)
--------
--------
multiply
--------
hello
a=1,b=2,c=1
-------------
multiply(end)
-------------
この規模だとあまり見やすい!って感じでもないですね。飾り付け等、使い方にもう少し工夫の余地がありそうです。inspectモジュールの他の機能についても調べてみようと思います。