溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的函數裝飾器有什么用

發布時間:2021-01-21 11:28:38 來源:億速云 閱讀:215 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關python的函數裝飾器有什么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

pyhton的函數裝飾器可以將裝飾器函數通過@方法很便捷的為函數增添功能

"""
一.函數用法
"""def sum_list(list):
    """將列表中的數字求和
    輸入:含有數字的列表
    list=[2,6,3,2,1]
    sum_list(list)
    """
    sum_=0
    for i in list:
        sum_+=i    return sum_#1.將函數sum_list賦值給變量list_sum,從而產生的新名稱函數list_sum()list_sum=sum_list
list_sum([2,5,3,8,6])#2.刪除函數del list_sum
list_sum([4,3,5,2])#NameError: name 'list_sum' is not defined#3.函數中定義函數def sum_(list):
    def sum_list(list):
        """將列表中的數字求和
        輸入:含有數字的列表
        list=[2,6,3,2,1]
        sum_list(list)
        """
        sum_ = 0
        for i in list:
            sum_ += i        return sum_    return sum_list(list)sum_([3,6,3,2])#4.將函數作為參數傳入另一個函數def print_():
    print('好開心!')print_()#定義一個嵌套函數,參數為定義好的函數def deco(function):
    def wrapped():
        print('這個函數被嵌套了')
        function()
    return  wrapped"""
二,函數裝飾器
"""#1.用函數裝飾器替代嵌套函數if '嵌套函數'=='嵌套函數':
    #定義一個打印函數
    def print_():
        print('好開心!')
    print_()

    #定義一個嵌套函數,參數為定義好的函數
    def deco(function):
        def wrapped():
            print('這個函數被嵌套了')
            function()
        return  wrapped

    print_2=deco(print_)#將嵌套函數的功能賦值給新函數print_2()
    print_2()if '函數裝飾器'=='函數裝飾器':
    #或者采用裝飾器的方法
    def deco(function):
        def wrapped():
            print('這個函數被嵌套了')
            function()
        return  wrapped

    @deco#可以直接將函數deco()嵌套在函數print_()上,形成新的函數
    def print_():
        print('好開心!')
    print_()#2.用一個函數裝飾器裝飾多個函數def print_name(function):
    """該裝飾器函數將為函數增加打印函數名字的功能"""
    import functools#該語句可以使函數被裝飾后,函數信息保持不變
    @functools.wraps(function)
    def wrapped(*args,**kwargs):
        """
        *args:表示可傳入任意數量的單值對象,函數將自動將其收集在元組中
        **kwargvs:表示可以傳入任意數量的字典鍵值對,比如:value=3,函數將自動收集為字典
        """
        print('函數的名字為%s'%function.__name__)
        return  function(*args,**kwargs)#執行傳入參數的函數
    return wrapped

@print_namedef sum_list(list):
    sum_=0
    for i in list:
        sum_+=i    return sum_
sum_list([5,7,3,2])sum_list.__name__#經過檢查,函數名稱沒有發生改變@print_namedef small_value(list):
    return min(list)small_value([4,8,4,2,4])#3.用多個函數裝飾器裝飾一個函數,靠近函數的裝飾器將被優先執行def print_hash(function):
    """該裝飾器函數將為函數增加打印函數hash值的功能"""
    def wrapped(*args,**kwargs):
        """
        *args:表示可傳入任意數量的單值對象,函數將自動將其收集在元組中
        **kwargvs:表示可以傳入任意數量的字典鍵值對,比如:value=3,函數將自動收集為字典
        """
        print('函數的名字為%s'%function.__hash__)
        return  function(*args,**kwargs)#執行傳入參數的函數
    return wrappeddef print_name(function):
    """該裝飾器函數將為函數增加打印函數名字的功能"""
    def wrapped(*args,**kwargs):
        """
        *args:表示可傳入任意數量的單值對象,函數將自動將其收集在元組中
        **kwargvs:表示可以傳入任意數量的字典鍵值對,比如:value=3,函數將自動收集為字典
        """
        print('函數的名字為%s'%function.__name__)
        return  function(*args,**kwargs)#執行傳入參數的函數
    return wrapped#為函數增添打印函數名稱和函數值的功能@print_hash
@print_namedef small_value(list):
    return min(list)

用類作為裝飾

#用類作為裝飾class FirstDecorator(object):#需要引入object
    def __init__(self,func):
        self.__func=func    def __call__(self, *args, **kwargs):# __call__ 方法可以讓函數使用裝飾
        import time        print('執行時間:{}'.format(time.ctime(time.time())))
        self.__func(*args)@FirstDecorator#使用類的裝飾def print_(*number):
    print(number)print_(5,63,8,4,6,2)

關于“python的函數裝飾器有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女