Python——装饰器(两种不同的使用场景)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python——装饰器(两种不同的使用场景)相关的知识,希望对你有一定的参考价值。
#例子,通过装饰器给show_name()函数增加验证功能 #version 1 #普通函数不带参数,装饰器带参数 def auth(func): # print(func.__name__) #通过打印这个结果得知,show_name函数被传入进来了 def auth_decorator(user, pwd): u = "toby" p = "1qaz#EDC" if user == u: if pwd == p: print("auth done...") func() #所以形式参数func等价于show_name() else: print("password error") else: print("not found user") return auth_decorator @auth def show_name(): print("my name is toby") show_name("toby","1qaz#EDC") # ######################################################################################### #version 2 普通函数和装饰器都带参数 def auth(func): # print(func.__name__) #通过打印这个结果得知,show_name函数被传入进来了 def auth_decorator(name, user, pwd): u = "toby" p = "1qaz#EDC" if user == u: if pwd == p: print("auth done...") func(name) #所以形式参数func等价于show_name() else: print("password error") else: print("not found user") return auth_decorator @auth def show_name(name): print("my name is {0}".format(name)) show_name("ttr", "toby","1qaz#EDC") #此时就要把show_name函数看成是show_name(name, user, pwd)这样,传三个参数进去 # ######################################################################################### #version 3 下面的使用的语法,允许动态的创建装饰过的函数对象 def auth(func): # print(func.__name__) #通过打印这个结果得知,show_name函数被传入进来了 def auth_decorator(user, pwd): u = "toby" p = "1qaz#EDC" if user == u: if pwd == p: print("auth done...") func() #所以形式参数func等价于show_name() else: print("password error") else: print("not found user") return auth_decorator def show_name(): print("my name is juck") #在这个函数中用auth_enable参数来控制是否装饰show_name函数 #auth_enable参数为True,则必须提供user和pwd #也就是说是开启验证和关闭验证由auth_enable来决定 def show_name_strengthen(auth_enable=False, u=None, p=None ): if auth_enable: s = auth(show_name) s(u, p) else: show_name() #show_name_strengthen() show_name_strengthen(True, "toby", "1qaz#EDC") ''' 两种不同的语法,使用场景: 1、语法用@符号来使用装饰器,这种语法往往用于对不同的函数做永久性的更改 2、这种语法允许我们动态的创建装饰过的函数对象,比如有多个不同功能的装饰器, 引入判断条件来使用不同的装饰器,也就是说可支持多种可选行为 '''
以上是关于Python——装饰器(两种不同的使用场景)的主要内容,如果未能解决你的问题,请参考以下文章