2011-09-15 20 views
6

可能性の重複:
How to get the function name as string in Python?Pythonで関数名を文字列として取得する方法は?

私はそれを行うことができることを知っている:

def func_name(): 
    print func_name.__name__ 

'my_func' としての機能の名前を返します。

しかし、私はこの機能を使用しているので、直接一般的に呼び出す方法はありますか? Pythonは、私は私のコード階層の上部を望むことを理解するであろうこれで

def func_name(): 
    print self.__name__ 

:よう 何か?

+1

をPythonでは、インスタンスメソッド(メソッドがバインドされているインスタンス)に渡される最初のパラメータに名前を付けるだけの規則です。 – geoffspear

+1

私は簡単な解決策はないと思います。この質問をチェックするhttp://stackoverflow.com/questions/5063607/is-there-a-self-flag-can-reference-python-function-inside-itself – rplnt

+1

名前を使用する予定はありますか? –

答えて

5

AFAIKはありません。

In [8]: def f(): pass 
    ...: 

In [9]: g = f 

In [10]: f.__name__ 
Out[10]: 'f' 

In [11]: g.__name__ 
Out[11]: 'f' 
2

一つの可能​​な方法はDecoratorsを使用することです:これで

def print_name(func, *args, **kwargs): 
    def f(*args, **kwargs): 
     print func.__name__ 
     return func(*args, **kwargs) 
    return f 

@print_name 
def funky(): 
    print "Hello" 

funky() 

# Prints: 
# 
# funky 
# Hello 

問題は、あなたがよされる関数オブジェクトは、複数の名前を持つことができますので、他にも、あなたの第一の方法は、完全に信頼できるものではありません実際の関数を呼び出す前または呼び出した後にのみ関数名を出力することができます。

あなたは既に関数を定義しているので、実際には名前をハードコードできませんでしたか?

9

ない一般的に、しかし、あなたはまた、tracebackモジュールを使用することができます

import inspect 

def callee(): 
    return inspect.getouterframes(inspect.currentframe())[1][1:4][2] 

def my_func(): 
    print callee() // string my_func 

ソースhttp://code.activestate.com/recipes/576925-caller-and-callee/

5

検査活用することができます: `self`は魔法のキーワードではない、ところで

import traceback 

def test(): 
    stack = traceback.extract_stack() 
    print stack[len(stack)-1][2] 


if __name__ == "__main__": 
    test() 
関連する問題