卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

如何在Python中獲取函數(shù)的名稱

Python是一種在IT行業(yè)中廣泛使用的編程語言。在本文中,我們將學(xué)習(xí)如何在Python中獲取函數(shù)的名稱。 函數(shù)對象的__name__屬性 在Python中,函數(shù)對象具有一個(gè)特殊的屬性__name

Python是一種在IT行業(yè)中廣泛使用的編程語言。在本文中,我們將學(xué)習(xí)如何在Python中獲取函數(shù)的名稱。

函數(shù)對象的__name__屬性

在Python中,函數(shù)對象具有一個(gè)特殊的屬性__name__,可以用來獲取函數(shù)的名稱。例如:

now.__name__   'now'
f.__name__   'now'

使用裝飾器增強(qiáng)函數(shù)功能

假設(shè)我們想要增強(qiáng)一個(gè)函數(shù)的功能,比如在函數(shù)調(diào)用前后自動(dòng)打印日志,但又不希望修改函數(shù)的定義。這種在代碼運(yùn)行期間動(dòng)態(tài)增加功能的方式被稱為“裝飾器”(Decorator)。

裝飾器是一個(gè)返回函數(shù)的高階函數(shù)。我們可以定義一個(gè)能夠打印日志的裝飾器,如下所示:

def log(func):
    def wrapper(*args, kw):
        print('call %s():' % func.__name__)
        return func(*args, kw)
    return wrapper

使用裝飾器

通過Python的@語法,我們可以將裝飾器放置在函數(shù)的定義處:

@log
def now():
    print('2013-12-25')

調(diào)用now()函數(shù)時(shí),不僅會(huì)執(zhí)行now()函數(shù)本身,還會(huì)在函數(shù)調(diào)用前打印一行日志:

now()

裝飾器的原理

將@log放置在now()函數(shù)的定義處,相當(dāng)于執(zhí)行了語句:

now  log(now)

由于log()是一個(gè)裝飾器,它返回一個(gè)函數(shù)。因此,原來的now()函數(shù)仍然存在,只是現(xiàn)在同名的now變量指向了新的函數(shù)。因此,調(diào)用now()將執(zhí)行新函數(shù),即在log()函數(shù)中返回的wrapper()函數(shù)。

接收參數(shù)的裝飾器

如果裝飾器本身需要傳入?yún)?shù),那就需要編寫一個(gè)返回裝飾器的高階函數(shù)。下面是一個(gè)自定義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

注意:調(diào)試代碼時(shí),需要將調(diào)試代碼注釋掉。

標(biāo)簽: