2011-09-15 96 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() 
相关问题