• day04.4-装饰器


    1. 装饰器

    • 装饰器本身就是函数,功能是为其他函数添加附加功能
    • 装饰器的设计原则:

         (a). 不修改被修饰函数的源代码;

         (b). 不修改被修改函数的调用方法。

    • 装饰器=高阶函数+函数嵌套+闭包
    • 装饰器框架
    1 def timmer(func):
    2     def wrapper():
    3         func()
    4     return wrapper
    5 func = timmer()
    6 func()

    2. 装饰器实例1:计算被修饰函数的运行时间 

     1 import time
     2 def bin(name,age):
     3     time.sleep(3)
     4     print("I am %s, I am %s years old" %(name,age))
     5     time.sleep(3)
     6 def timer(func):
     7     def wrapper(*args,**kwargs):
     8         star = time.time()
     9         func(*args,**kwargs)
    10         stop = time.time()
    11         res = stop-star
    12         return res
    13     return wrapper
    14 bin = timer(bin)        #相当于wrapper = timer(bin)
    15 dif_time = bin("alex",18)        #相当于dif_time = wrapper("alex",18)
    16 print("被修饰函数的运行时间为%s" %dif_time)
    17 
    18 """
    19 运行结果:
    20     I am alex, I am 18 years old
    21     被修饰函数的运行时间为6.001323223114014
    22 """ 

    3. 装饰器实例2:登录界面添加身份认证功能

     1 user_list = [{"name":"stephen","passwd":"123"},
     2              {"name": "klay", "passwd": "123"},
     3              {"name": "durant", "passwd": "123"},
     4              {"name": "green", "passwd": "123"}]
     5 def home(name):
     6     print("Welcome %s to enter the system" %name)
     7 def certification(func):
     8     def wrapper(name):
     9         passwd = input("please enter your password:").strip()
    10         for item in user_list:
    11             if item["name"]==name and item["passwd"]==passwd:
    12                 func(name)
    13                 return 1
    14         return 0
    15     return wrapper
    16 home = certification(home)    #相当于wrapper = certification(home)
    17 res = home("klay")      #相当于wrapper("klay")
    18 if not res:
    19     print("密码或用户名输入错误")
    20 
    21 """
    22 运行结果:
    23     please enter your password:123
    24     Welcome klay to enter the system
    25 """

         

  • 相关阅读:
    《剑指Offer》二维数组中的查找
    白话计算机入门书籍--《穿越计算机的迷雾》有感
    Mysql Cluster7.5.6在 windows10 部署安装
    Mysql Cluster7.5.6 windows10 部署安装
    lll
    线程控制
    动态链接库相关知识
    二分查找及其变种简单易懂的模版
    白话 STL next_permutation 原理
    Maven本地上有包还去网上找包
  • 原文地址:https://www.cnblogs.com/zizaijiapu/p/10651070.html
Copyright © 2020-2023  润新知