[关闭]
@spiritnotes 2016-03-08T08:07:17.000000Z 字数 742 阅读 5600

Python获取函数名字的方法

Python


在程序处理中,有时候需要出现获取函数名字,这时有可能在函数内部,也有可能在函数外部,不同的情况下应该如何获取呢?

函数外部

在函数外部比较简单,直接采用__name__即可

  1. def fun_name():
  2. pass
  3. z = fun_name
  4. print(z.__name__)
  5. print(getattr(z,'__name__'))

函数内部

而在函数内部就需要复杂一点了,有如下方法:

通过sys._getframe().f_code.co_name获取

  1. def fun_name():
  2. import sys
  3. print(sys._getframe().f_code.co_name)
  4. z = fun_name
  5. z()

通过装饰器将名字作为参数传入函数

  1. def dec_name(f):
  2. name = f.__name__
  3. def new_f(*a, **ka):
  4. return f(*a, __name__ = name, **ka)
  5. return new_f
  6. @dec_name
  7. def fun_name(x, __name__):
  8. print(__name__)
  9. z = fun_name
  10. z(1)

通过inspect获取名字

  1. import inspect
  2. def fun_name():
  3. print(inspect.stack()[0][3])
  4. z = fun_name
  5. z()

测试

代码: https://github.com/spiritwiki/codes/tree/master/LearnPython

  1. 函数外边获得函数的名字
  2. fun_name
  3. fun_name
  4. 函数内部通过sys._getframe().f_code.co_name获得名字
  5. fun_name
  6. 通过装饰器将名字作为参数传入函数
  7. fun_name
  8. 通过inspect获取名字
  9. fun_name
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注