【问题标题】:How to get the function name as string in Python? [duplicate]如何在 Python 中将函数名作为字符串获取? [复制]
【发布时间】:2011-11-17 22:44:02
【问题描述】:

可能重复:
How to get the function name as string in Python?

我知道我能做到:

def func_name():
    print func_name.__name__

这会将函数的名称返回为“my_func”。

但是当我进入函数时,有没有办法直接调用它? 类似的东西:

def func_name():
    print self.__name__

哪个 Python 会理解我想要代码层次结构的上半部分?

【问题讨论】:

  • 顺便说一句,self 在 Python 中不是一个神奇的关键字,它只是命名传递给实例方法的第一个参数的约定(这是方法绑定到的实例)。跨度>
  • 我认为没有简单的解决方案。检查这个问题stackoverflow.com/questions/5063607/…
  • 你打算用这个名字做什么?

标签: python


【解决方案1】:

不是通用的,但您可以利用检查

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/

【讨论】:

    【解决方案2】:

    AFAIK,没有。此外,即使您的第一个方法也不完全可靠,因为函数对象可以有多个名称:

    In [8]: def f(): pass
       ...: 
    
    In [9]: g = f
    
    In [10]: f.__name__
    Out[10]: 'f'
    
    In [11]: g.__name__
    Out[11]: 'f'
    

    【讨论】:

      【解决方案3】:

      您也可以使用traceback 模块:

      import traceback
      
      def test():
          stack = traceback.extract_stack()
          print stack[len(stack)-1][2]
      
      
      if __name__ == "__main__":
          test()
      

      【讨论】:

        【解决方案4】:

        一种可能的方法是使用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
        

        问题是您只能在调用实际函数之前或之后打印函数名称。

        实际上,既然你已经定义了函数,你就不能硬编码名字吗?

        【讨论】:

          猜你喜欢
          • 2011-10-31
          • 1970-01-01
          • 1970-01-01
          • 2020-06-24
          • 2010-12-06
          • 2010-10-06
          • 1970-01-01
          • 2018-01-07
          • 1970-01-01
          相关资源
          最近更新 更多