python現在の関数名の取得
2552 ワード
ログを打つとき、現在の関数名を印刷したり、関数名を実行したりすることがよくあります.印刷された関数名が正しいと、クエリーの位置決め問題の原因効率が向上し、なければコードの検索が面倒になります.
ここではsysモジュール、inspectモジュールのいくつかの方法を紹介します.
1、関数名を取得し、クラス名を取得します.
結果:
1 2 3関数名:test_funcクラス名:Test Test
2、関数の内部またはクラスの内部で関数名を取得するには、sysモジュールのsys._を使用します.getframe().f_code.co_name、次の例です.
結果:
1 2現在の関数名:test_Sys現在の関数名:ts
もちろん、一般的には異なる関数で呼び出される彼がよく使われていますが、呼び出された関数を印刷したいので、試してみましょう.
結果:------関数呼び出し------現在の関数名:a------単一クラス時内部呼び出し------現在の関数名:testa------複数クラス時内部呼び出し------現在の関数名:testa
上から表示、sys._getframe().f_code.co_nameは自分の関数の名前しか印刷できず、呼び出された関数の名前を印刷できません.
3、inspectモジュールのinspectを使用する.stack()メソッド、現在実行されている関数名(またはメソッド名)を動的に取得します.例を見てみましょう.
結果:
------関数呼び出し------現在の関数名:use_a------単一クラス時内部呼び出し------現在の関数名:testb------複数クラス時内部呼び出し------現在の関数名:testc
上から見えるstack()は彼を呼び出す関数を印刷します
このいくつかの方法のサポートがあって、好きなようにロゴを打つことができて、その関数の名前をはっきり印刷することができます
ここではsysモジュール、inspectモジュールのいくつかの方法を紹介します.
1、関数名を取得し、クラス名を取得します.
##
def test_func():
pass
print(' :',test_func.__name__)
##
class Test:
def test(self):
print(self.__class__.__name__)
print(' :',Test().__class__.__name__)
t = Test().test()
結果:
1 2 3関数名:test_funcクラス名:Test Test
2、関数の内部またはクラスの内部で関数名を取得するには、sysモジュールのsys._を使用します.getframe().f_code.co_name、次の例です.
import sys
##
def test_sys():
print(' :',sys._getframe().f_code.co_name)
test_sys()
##
class TestSys:
def ts(self):
print(' :', sys._getframe().f_code.co_name)
t = TestSys()
t.ts()
結果:
1 2現在の関数名:test_Sys現在の関数名:ts
もちろん、一般的には異なる関数で呼び出される彼がよく使われていますが、呼び出された関数を印刷したいので、試してみましょう.
import sys
##
def a():
print(' :',sys._getframe().f_code.co_name)
def use_a():
## a
a()
## a
print('------ ------')
use_a()
##
class TestSys:
def testa(self):
print(' :', sys._getframe().f_code.co_name)
def testb(self):
self.testa()
##
print('------ ------')
t = TestSys()
t.testb()
class Testsys:
def testc(self):
TestSys().testa()
## ,
print('------ ------')
t = Testsys()
t.testc()
結果:------関数呼び出し------現在の関数名:a------単一クラス時内部呼び出し------現在の関数名:testa------複数クラス時内部呼び出し------現在の関数名:testa
上から表示、sys._getframe().f_code.co_nameは自分の関数の名前しか印刷できず、呼び出された関数の名前を印刷できません.
3、inspectモジュールのinspectを使用する.stack()メソッド、現在実行されている関数名(またはメソッド名)を動的に取得します.例を見てみましょう.
import inspect
##
def a():
print(' :',inspect.stack()[1][3])def use_a():
## a
a()
## a
print('------ ------')
use_a()
##
class TestSys:
def testa(self):
print(' :', inspect.stack()[1][3])
def testb(self):
self.testa()
##
print('------ ------')
t = TestSys()
t.testb()
class Testsys:
def testc(self):
TestSys().testa()
## ,
print('------ ------')
t = Testsys()
t.testc()
結果:
------関数呼び出し------現在の関数名:use_a------単一クラス時内部呼び出し------現在の関数名:testb------複数クラス時内部呼び出し------現在の関数名:testc
上から見えるstack()は彼を呼び出す関数を印刷します
このいくつかの方法のサポートがあって、好きなようにロゴを打つことができて、その関数の名前をはっきり印刷することができます