成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python 多個裝飾器的調(diào)用順序

wapeyang / 2559人閱讀

摘要:如果不使用裝飾器的話,普通的做法可能是在中寫一堆校驗代碼來判斷用戶是否登錄,然后決定后面的執(zhí)行邏輯,這樣比較麻煩。

前言

裝飾器是程序開發(fā)中經(jīng)常會用到的一個功能,也是python語言開發(fā)的基礎(chǔ)知識,如果能夠在程序中合理的使用裝飾器,不僅可以提高開發(fā)效率,而且可以讓寫的代碼看上去顯的高大上^_^

使用場景

可以用到裝飾器的地方有很多,簡單的舉例如以下場景

引入日志

函數(shù)執(zhí)行時間統(tǒng)計

執(zhí)行函數(shù)前預(yù)備處理

執(zhí)行函數(shù)后清理功能

權(quán)限校驗等場景

緩存

裝飾器案例
def user_login(fun):
    def islogin(request,*args,**kwargs):
        context = {}
        if request.session.has_key("uname"):
            context["uname"] = request.session.get("uname")
        else:
            context["uname"] = "None"
        return fun(request,context,*args,**kwargs)
    return islogin

@user_login
def ucOrder(request,context,pIndex):
    """
    獲取數(shù)據(jù)
    處理數(shù)據(jù)
    傳遞到頁面上去

以上是一個簡單電商應(yīng)用中使用裝飾器的案例,其中 ucOrder函數(shù)是是用戶需要登錄后才能被執(zhí)行到的。如果不使用裝飾器的話,普通的做法可能是在 ucOrder中寫一堆校驗代碼來判斷用戶是否登錄,然后決定后面的執(zhí)行邏輯,這樣比較麻煩。

那么使用裝飾器之后就比較簡單了,只需要按照裝飾器的使用格式,在ucOrder函數(shù)上面加上@user_login,那么python解釋器在運行的時候,就會從上到下解釋代碼,先執(zhí)行user_login函數(shù),并且將ucOrder作為user_login函數(shù)的參數(shù)傳入進(jìn)去,即等價于user_login(ucOrder),這樣就起到了一個校驗用戶是否登錄,從而決定是否執(zhí)行ucOrder函數(shù)的功能

多個裝飾器使用的調(diào)用順序
def one(func):
    print("----1----")
    def two():
        print("----2----")
        func()
    return two

def a(func):
    print("----a----")
    def b():
        print("----b----")
        func()
    return b

@one
@a
def demo():
    print("----3----")

demo()

執(zhí)行結(jié)果:

/usr/bin/python2.7 /home/python/Desktop/tornadoProject/one.py
----a----
----1----
----2----
----b----
----3----

可以從執(zhí)行結(jié)果中看到,如果是使用多個裝飾器,它的執(zhí)行順序還是有點怪異的的,為什么會這樣呢?

關(guān)于這個問題,有更好的文章可以解釋,具體見以下鏈接

Python 裝飾器執(zhí)行順序迷思

其他參考文章:
理解 Python 裝飾器看這一篇就夠了

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/38425.html

相關(guān)文章

  • python多個裝飾器的執(zhí)行順序

    今天講一下python中裝飾器的執(zhí)行順序,以兩個裝飾器為例。 裝飾器代碼如下: def wrapper_out1(func): print(--out11--) def inner1(*args, **kwargs): print(--in11--) ret = func(*args, **kwargs) print(--in12-...

    or0fun 評論0 收藏0
  • Python】一文弄懂python裝飾器(附源碼例子)

    摘要:裝飾器的使用符合了面向?qū)ο缶幊痰拈_放封閉原則。三簡單的裝飾器基于上面的函數(shù)執(zhí)行時間的需求,我們就手寫一個簡單的裝飾器進(jìn)行實現(xiàn)。函數(shù)體就是要實現(xiàn)裝飾器的內(nèi)容。類裝飾器的實現(xiàn)是調(diào)用了類里面的函數(shù)。類裝飾器的寫法比我們裝飾器函數(shù)的寫法更加簡單。 目錄 前言 一、什么是裝飾器 二、為什么要用裝飾器 ...

    liuchengxu 評論0 收藏0
  • Python - 裝飾器decorator

    摘要:在這種代碼運行期間動態(tài)增加功能的方式,稱之為裝飾器。四接收特定類型參數(shù)的裝飾器裝飾器可以接收參數(shù),當(dāng)調(diào)用裝飾器返回的函數(shù)時,也就調(diào)用了包裹函數(shù),把參數(shù)傳入包裹函數(shù),它將參數(shù)傳遞給被裝飾的函數(shù)。執(zhí)行結(jié)果執(zhí)行結(jié)果 【題外話】心塞塞 心情down down down 有段時間沒用裝飾器了,然后然后問著就跪了~~~回來翻了翻資料和代碼...... 一、什么是裝飾器 裝飾器,decor...

    HackerShell 評論0 收藏0
  • Python 函數(shù)式編程、裝飾器以及一些相關(guān)概念簡介

    摘要:重寫內(nèi)建名字空間中的函數(shù)閉包閉包是詞法閉包的簡稱。另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實體。 Python 中的 Decorator(裝飾器) 是對一個函數(shù)或者方法的封裝,從而使其可以完成一些與自身功能無關(guān)的工作。 預(yù)備知識 一切皆對象 在 Python 中,所有的一切都被視為對象,任何的變量、函數(shù)、類等都是 object 的子類。因此除了變量之外,函數(shù)和類等也可以...

    Jinkey 評論0 收藏0
  • Python 裝飾器執(zhí)行順序迷思

    摘要:探究多個裝飾器執(zhí)行順序裝飾器是用于封裝函數(shù)或代碼的工具,網(wǎng)上可以搜到很多文章可以學(xué)習(xí),我在這里要討論的是多個裝飾器執(zhí)行順序的一個迷思。這時候你該知道為什么輸出結(jié)果會是那樣,以及對裝飾器執(zhí)行順序?qū)嶋H發(fā)生了什么有一定了解了吧。 探究多個裝飾器執(zhí)行順序 裝飾器是Python用于封裝函數(shù)或代碼的工具,網(wǎng)上可以搜到很多文章可以學(xué)習(xí),我在這里要討論的是多個裝飾器執(zhí)行順序的一個迷思。 疑問 大部...

    frolc 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<