python中如何获得函数的名字

 时间:2026-02-14 12:09:51

1、函数对象有一个__name__ 属性,可以拿到函数的名字

>>> now.__name__

'now'

>>> f.__name__

'now'

python中如何获得函数的名字

2、假设我们要增强now() 函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now() 函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。decorator就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的decorator,可以定义如下:

def log(func):

      def wrapper(*args, **kw):

            print 'call %s():' % func.__name__

            return func(*args, **kw)

     return wrapper

python中如何获得函数的名字

3、观察上面的log ,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处:

@log

def now():

print '2013-12-25'

python中如何获得函数的名字

4、调用now() 函数,不仅会运行now() 函数本身,还会在运行now() 函数前打印一行日志:

now()

python中如何获得函数的名字

5、把@log 放到now() 函数的定义处,相当于执行了语句:

now = log(now)

python中如何获得函数的名字

6、由于log() 是一个decorator,返回一个函数,所以,原来的now() 函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now() 将执行新函数,即在log() 函数中返回的wrapper() 函数。

7、如果decorator本身需要传入参数,那就需要编写一个返回decorator的高阶函数,写出来会更复杂。比如,要自定义log的文本:

def log(text):

     def decorator(func):

          def wrapper(*args, **kw):

                 print '%s %s():' % (text, func.__name__)

         return func(*args, **kw)

     return wrapper

return decorator

#注意调试代码

python中如何获得函数的名字

  • 1980年100元为什么是钱币收藏的“黑马”
  • 火影忍者排位战怎么设置防守阵容
  • 龙神契约羽翼之心怎么用
  • 白耙齿菌有效解决肾病难题
  • 慢性胃炎,要养,老中医给一个调理方法非常好
  • 热门搜索
    枫泾古镇旅游攻略 山东省旅游景点大全 中山旅游网 塞班旅游 圣托里尼岛旅游多少钱 江西旅游必去景点 暑假去哪旅游好 烟台旅游政务网 深圳华侨城旅游攻略 九寨沟旅游季节