zoukankan      html  css  js  c++  java
  • Python 初始—(装饰器)

    本质上也是函数的另一种表现形式,为其它函数丰富其功能,装饰其他函数,附加功能

    在不改变被装饰的函数的源代码,而且不改变被装饰的函数的调用方式,因此被装饰的函数感知不到装饰器函数的存在

    分解装饰器

    • 函数即变量
    • 高阶函数
    • 嵌套函数

    函數从上往下依次执行,函数会在内存中创建,当函数未创建,当引用时,在内存中找不到,会出错!!

    其中这个函数被引用时,则也是引用这个函数在内存中的空间,于是会出现引用计数

    高阶函数

         把一个函数当成实参传给另一个函数(在不改变被修饰函数的源代码的情况下为被装饰的函数添加新的功能)

         返回值中包含函数名,可以对返回值中的函数的内存地址进行引用进一步对被修饰的函数进行装饰(同时也是不改变被装饰的函数代码的情况下)

     嵌套函数

    函数即变量,在函数内中定义一个函数,用def去声明一个函数,嵌套函数的作用域只能在函数内,相当于函数内的局部变量

    下面实现一个用装饰器模拟的一个网站安全认证的小例如下:

     1 user, passwd = 'jim', '123456'
     2 
     3 
     4 def auth(auth_type):
     5     def dif_auth(func):
     6         def wrapper(*args, **kwargs):
     7             if auth_type == "local":
     8                 user_name = input("请输入用户名").strip()
     9                 pwd = input("请输入密码").strip()
    10                 if user_name == user and pwd == passwd:
    11                     print("33[32;1m登录成功 33[0m")
    12                     return func(*args, **kwargs)  # 返回值
    13                 else:
    14                     exit("33[31;1m用户名 or 密码输入有误 33[0m")
    15             elif auth_type == "internet":
    16                 pass
    17 
    18         return wrapper;
    19 
    20     return dif_auth
    21 
    22 
    23 @auth(auth_type="local")
    24 def index():
    25     print("这是网站主页")
    26 
    27 
    28 @auth(auth_type="internet")
    29 def detail():
    30     print("网站详情页")
    31 
    32 index()
    33 detail()
  • 相关阅读:
    客户主数据批导
    update module (更新模块)
    关于SAP的编码范围
    MV45AOZZ 销售订单增强点
    BAPI list
    sap crm 常用表
    ME01 创建货源清单
    SAP采购寄售业务操作步骤
    让APK 成功在 Windows 运行并可以设置本地文件
    FastAdmin 学习线路 (2018-06-09 更新)
  • 原文地址:https://www.cnblogs.com/fuGuy/p/7954679.html
Copyright © 2011-2022 走看看