成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

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

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

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

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

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

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

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

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

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

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ù)時,不僅會執(zhí)行now()函數(shù)本身,還會在函數(shù)調(diào)用前打印一行日志:

now()

裝飾器的原理

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

now  log(now)

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

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

如果裝飾器本身需要傳入?yún)?shù),那就需要編寫一個返回裝飾器的高階函數(shù)。下面是一個自定義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)試代碼時,需要將調(diào)試代碼注釋掉。

標簽: