Python 裝飾器工做原理解析

#!/usr/bin/env python
#coding:utf-8


"""
裝飾器實例拆解
"""


def login00(func):
    print('00請經過驗證用戶!')
    return func

def tv00(name):
    print('00你的用戶是:%s' %name)


# 裝飾器的精簡工做原理解釋:

tv = login00(tv00) # 返回tv函數的對象,賦值給tv

tv('yh00') # 調用執行tv函數


# 魔方版裝飾器

def login01(func):
    print('01請經過驗證用戶!')
    return func

@login01
def tv01(name):
    print('01你的用戶是:%s' %name)

tv01('yh01')

# 存在一個問題,調用執行tv函數前,會執行login函數的print語句


# 改進版裝飾器

def login02(func):
    def inner(arg):
        print('02請經過驗證用戶!')
        func(arg)
    return inner

def tv02(name):
    print('02你的用戶是:%s' %name)

tv02 = login02(tv02) # 返回inner函數的對象,賦值給tv02;並把 tv02函數的對象 傳遞給 login02函數的形參 func

tv02('yh02') # 調用執行tv02函數,把實參:yh02 傳給 形參arg;執行tv02('yh02')

# 改進 魔方版 版裝飾器

def login03(func):
    def inner(arg):
        print('03請經過驗證用戶!')
        func(arg)
    return inner

@login03
def tv03(name):
    print('03你的用戶是:%s' %name)

tv03('yh03')
相關文章
相關標籤/搜索