python基礎—裝飾器

來源:互聯網
上載者:User

標籤:return   直接   python   返回   賦值函數   command   wrapper   傳遞參數   log   

python基礎—裝飾器
  • 定義:一個函數,可以接受一個函數作為參數,對該函數進行一些封裝,不改變函數的本身。
def foo():    return 123a=foo();b=foo;print(a)print(b)
123<function foo at 0x000001608E2B97B8>
解釋:把函數foo賦值給a和b,a 賦值的是調用後的函數,變數的值就是傳回值。b 賦值的是調用前的函數,所以b 就是那個賦值的函數。函數本身+(),就是調用。
callable(a)
False
callable(b)
True
解釋: 用callable判斷某個東西是否可以被調用,call是調用的意思,able是“能的”形容詞尾碼,翻譯就是可調用的。b是函數本身,可以被調用,a是函數的結果,不能被調用。
1. 函數可以作為參數傳遞,在函數內部仍可進行調用。可以將函數在內部定義理解為一個變數在內部定義。
def foo():    print(1234)def bar(func):    func()bar(foo)  
1234
解釋:我先定義一個函數foo,然後再定義一個函數bar,我調用foo的時候,即foo(),沒有設定傳遞參數,列印了1234.我調用bar的時候,傳遞了一個函數foo作為參數,即bar(foo),得到的結果就是func(),調用函數本身,所以得到1234的結果。
2. 函數可嵌套定義,並可在內部直接調用。且可調用外層函數傳遞的參數.
def foo(x):    def bar():        print(x)    bar()foo(1234)
1234
解釋:內層函數可以調用外層函數傳遞的參數,f(1234)傳遞給了內層函數。內層沒有找到x變數的值,就去臨近的外層變數尋找。外層傳遞一個1234,就傳遞給內層了。最後一行的bar()是在外層函數的內部直接調用內層函數。函數嵌套定義就是可以把函數看成定義一個變數,類似於b=1,還有就是內層函數可以調用外層函數傳遞的參數,記住這兩點就可以了。
3. 函數可以作為return的傳回值
def bar():    print(1234)def foo(func):    return funca=foo(bar)a 
<function __main__.bar>
4. 合起來就是裝飾器
def deco(func):    def wrapper():        print("pre command")        ret=func()        print("post command")        return ret    return wrapperdef foo():              return(1234)    return 444foo=deco(foo)    #給變數賦值函數的是return,return的是wrapper,所以foo其實就是wrapperfoo()
pre commandpost command1234
解釋:最後的foo就是wrapper,就是deco(foo),是內層函數“g()”,可以用foo.name查看,就是wrapper,callable(foo),可以看到它可以調用。

python基礎—裝飾器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.