2011-09-15 94 views
6

可能重複:
How to get the function name as string in Python?如何在Python中獲取函數名稱作爲字符串?

我知道我能做到這一點:

def func_name(): 
    print func_name.__name__ 

這將返回的功能爲 'my_func,並將' 的名稱。

但是,當我進入函數,有沒有辦法直接調用它的一般? 喜歡的東西:

def func_name(): 
    print self.__name__ 

在它是由Python會明白,我想我的代碼層次上的?

+1

順便說一句,'self'是不是魔術關鍵字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 

問題的,這是你只能在調用實際函數之前或之後打印函數名稱。

雖然實際上,因爲你已經定義了這個函數,難道你不能只是把名字硬編碼嗎?

5

您還可以使用traceback模塊:

import traceback 

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


if __name__ == "__main__": 
    test() 
相關問題