閉包和裝飾器

python一切皆對象(瞭解)

https://blog.csdn.net/LRLZ_Python/article/details/49893103

閉包

閉包:兩個函數的嵌套,外部函數返回內部函數的引用,外部函數必定有參數
def 外部函數(參數):
    def 內部函數():
        pass
    return 內部函數

他跟函數之間的區別:
        1.格式兩個函數嵌套
        2.閉包外部函數的參數能夠在內存中保持

裝飾器

裝飾器是什麼:閉包加@xxx
裝飾器的做用:在不改變原先的函數值跟調用的方式,添加額外的功能
裝飾器的代碼:
    def set_fun(func):
        def call_fun(*args,**kwargs):
            return func(*args,**kwargs)

        return call_fun

    @set_fun    
    def test():
        pass

裝飾器結論:

1.裝飾前的函數test,是由func指向的
2.裝飾後的函數test,實際是call_fun
3.裝飾前的test,call_fun,func三者參數一致
4.裝飾器不能去改變函數的調用方式跟返回值(道德)

一個裝飾器一個函數了解

二個裝飾器裝飾一個函數圖解大法

二個裝飾器裝飾器一個函數內存圖瞭解

做業

計算某函數的執行次數,用戶行爲分析
計算某函數的執行時間,優化
下面是某函數:
def test():
        print("test")
下面是時間:
import time
time.time()

類裝飾

class  類名(objec):
    def __init__():  @類的時候執行
        pass

    def __call__():  裝飾後的調用執行
        pass

裝飾器傳參

1. 三個函數嵌套,第三層內部包含一個閉包,第三層返回閉包的引用
def set_args(參數):
    def set_fun(func):
        def call_fun(*args,**kwargs):
            return func(*args,**kwargs)
        return call_fun
        ****
    return set_fun

@set_args("參數)
def test():
    pass
相關文章
相關標籤/搜索