zoukankan      html  css  js  c++  java
  • 装饰器学习小程序

    通过做一个网页的登录验证程序来学习装饰器

    import time
    
    
    user,passwd = 'alex','abc123'
    
    def auth (auth_type):
    	print ("auth func:",auth_type)
    	def  outer_wrapper(func):
    		
    		def weapper(*args,**kwargs):
    			print("weapper func args",*arge. **kwargs)
    			if auth_type == "local":
    				username = input("username:").strip()
    				password = input("passwd:").strip()
    				if user == username and  passwd == password:
    					print ('33[32;1mUser has passed authentication33[0m')
    					res = func(*args,**kwargs) # from home 
    					print ('---after authentication ')
    					return res 
    				else:
    					exit("33[31;1mInvalid username or password33[0m")
    			elif auth_type == "ldap":
    				print("不会。。。")
    				
    		return wrapper
    	return outer_wrapper
    def index():
    	pirnt("welcome to index page ")
    	
    @auth(auth_type="local")	# home = wrapper
    def home():
        print("home page")
    	return "from home"
    	
    	@auth(auth_type="ldap")	
    def bbs():
        print("bbs page")
    index()
    print(home()) #wrapper
    bbs()
    

     记住:高阶函数+嵌套函数=装饰器,其本质是函数,用来给其它函数添加新功能,且不改变原函数的调用方式。

  • 相关阅读:
    bzoj3757 苹果树
    bzoj2743 [HEOI2012]采花
    bzoj4241 历史研究
    bzoj4448 [Scoi2015]情报传递
    bzoj3295 [Cqoi2011]动态逆序对
    bzoj4034 [HAOI2015]T2
    bzoj3339 Rmq Problem
    BZOJ 1017 魔兽地图
    BZOJ 1021 循环的债务
    SUOI #37 清点更多船只
  • 原文地址:https://www.cnblogs.com/youyuan-wang/p/6131930.html
Copyright © 2011-2022 走看看