当前位置: 首页 > news >正文

Python装饰器主要用法

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = '人生入戏'
user = "admin"
passwd = "123456"
def auth(auth_type):
    #print("auth_type:",auth_type)
    def out_wrapper(func):
        #print("func",func)
        def wrapper(*args,**kwargs):
            #print(args,kwargs)
            if auth_type == "1":
                username = input("username:").strip()
                password = input("password:").strip()
                if username == user and password == passwd:
                    print("start".center(20,"-"))
                    res = func(*args,**kwargs)#把函数的返回值赋值到res
                    print("end".center(20,"-"))
                    return res#返回函数的返回值
                else:
                    print("error!")
            elif auth_type =="2":
                print('2')

        return wrapper
    return out_wrapper

def index():
    print("index ok")
@auth(auth_type="1")
def home(name):
    print("home ok",name)
    return 'from home'
@auth(auth_type="2")
def bbs():
    print("bbs ok")

index()
print(home("你好"))#打印home函数的返回值
bbs()

'''
装饰器:
定义:本质是函数,就是为了给其他的函数增加其他功能
原则:不能改变被装饰函数的源码和调用方式
'''
'''
一、函数等于'变量'
二、高阶函数:
    1.把一个函数名当作实参传给另一个函数(在不修改被装饰函数的代码的情况下增加其他功能)
    2.返回值包含函数名(不修改函数的调用方式)
三、嵌套函数
'''
'''
嵌套函数+高阶函数=装饰器
'''

 

转载于:https://www.cnblogs.com/my-times/p/7351868.html

相关文章:

  • JMeter学习-004-WEB脚本入门实战
  • JDBC的链接及封装
  • 对于盒模型的宽高获取填坑
  • 普通程序员如何入门AI
  • 技术分享之AQS——内容提要
  • ansible基本使用教程
  • Kafka【第一篇】Kafka集群搭建
  • vue2.0 新手教程(一)
  • POJ 3104 Drying 二分
  • hihocoder-1546-集合计数
  • JTemplates + $.Ajax
  • 面向对象编程思想-命令模式
  • C#自定义事件模拟风吹草摇摆
  • 仿真反射详解(二)
  • alwayson01-搭建域环境
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 4个实用的微服务测试策略
  • CAP 一致性协议及应用解析
  • CentOS7 安装JDK
  • centos安装java运行环境jdk+tomcat
  • Java|序列化异常StreamCorruptedException的解决方法
  • Javascript Math对象和Date对象常用方法详解
  • Java知识点总结(JavaIO-打印流)
  • js操作时间(持续更新)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Rancher-k8s加速安装文档
  • React-redux的原理以及使用
  • SegmentFault 2015 Top Rank
  • uni-app项目数字滚动
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 关于for循环的简单归纳
  • 规范化安全开发 KOA 手脚架
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 项目管理碎碎念系列之一:干系人管理
  • AI算硅基生命吗,为什么?
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 积累各种好的链接
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)STL算法之搜索(二) 二分查找
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • ****Linux下Mysql的安装和配置
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net core Swagger 过滤部分Api
  • .NET Core 成都线下面基会拉开序幕
  • .Net Redis的秒杀Dome和异步执行
  • .NET 设计模式初探
  • .net 托管代码与非托管代码