38、带参数的装饰器

2023-05-16

一. 带参数的装饰器

我们看,装饰器其实就是一个闭包函数,再说简单点就是两层的函数。那么是函数,就应该具有函数传参功能。

login_status = {
    'username': None,
    'status': False,
}

def auth(func):
    def inner(*args,**kwargs):
        if login_status['status']:
            ret = func()
            return ret
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()
        if username == '太白' and password == '123':
            login_status['status'] = True
            ret = func()
            return ret
    return inner

你看我上面的装饰器,不要打开,他可以不可在套一层:

def auth(x):
    def auth2(func):
        def inner(*args,**kwargs):
            if login_status['status']:
                ret = func()
                return ret
            username = input('请输入用户名:').strip()
            password = input('请输入密码:').strip()
            if username == '太白' and password == '123':
                login_status['status'] = True
                ret = func()
                return ret
        return inner
    return auth

​ 举例说明:抖音:绑定的是微信账号密码。 皮皮虾:绑定的是qq的账号密码。 你现在要完成的就是你的装饰器要分情况去判断账号和密码,不同的函数用的账号和密码来源不同。 但是你之前写的装饰器只能接受一个参数就是函数名,所以你写一个可以接受参数的装饰器。

def auth2(func):
    def inner(*args, **kwargs):
        if login_status['status']:
            ret = func()
            return ret
        if 微信:
            username = input('请输入用户名:').strip()
            password = input('请输入密码:').strip()
            if username == '太白' and password == '123':
                login_status['status'] = True
                ret = func()
                return ret
        elif 'qq':
            username = input('请输入用户名:').strip()
            password = input('请输入密码:').strip()
            if username == '太白' and password == '123':
                login_status['status'] = True
                ret = func()
                return ret
    return inner

@auth2
def jitter():
    print('记录美好生活')


@auth2
def pipefish():
    print('期待你的内涵神评论')

解决方式:

def auth(x):
    def auth2(func):
        def inner(*args, **kwargs):
            if login_status['status']:
                ret = func()
                return ret
            
            if x == 'wechat':
                username = input('请输入用户名:').strip()
                password = input('请输入密码:').strip()
                if username == '太白' and password == '123':
                    login_status['status'] = True
                    ret = func()
                    return ret
            elif x == 'qq':
                username = input('请输入用户名:').strip()
                password = input('请输入密码:').strip()
                if username == '太白' and password == '123':
                    login_status['status'] = True
                    ret = func()
                    return ret
        return inner
    return auth2
    
@auth('wechat')  
def jitter():
    print('记录美好生活')

@auth('qq')
def pipefish():
    print('期待你的内涵神评论')

@auth(‘wechat’) :分两步:

第一步先执行auth(‘wechat’)函数,得到返回值auth2

第二步@与auth2结合,形成装饰器@auth2 然后在依次执行。

这样就是带参数的装饰器,参数可以传入多个,一般带参数的装饰器在以后的工作中都是给你提供的, 你会用就行,但是自己也一定要会写,面试经常会遇到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

38、带参数的装饰器 的相关文章

随机推荐

  • 大数据(巨量数据集合(IT行业术语))

    大数据 xff08 巨量数据集合 xff08 IT行业术语 xff09 xff09 大数据定义 对于 大数据 xff08 Big data xff09 研究机构Gartner给出了这样的定义 大数据 是需要新处理模式才能具有更强的决策力 洞
  • 乌班图安装 Kalibr

    安装ROS Melodic 1 Installation 1 1 Configure your Ubuntu repositories http www 360doc com content 18 0417 15 54525756 7463
  • STM32F103标准库开发---Uart串口通信实验---函数发送和中断接收

    STM32F103标准库开发 目录 文章目录 一 Uart串口通信 函数发送 1 Uart串口发送 标准库 函数 单字节发送 2 Uart串口检测标志 标准库 函数 3 Uart串口函数发送具体程序 二 Uart串口通信 中断接收 1 Ua
  • OVN 简介

    文章目录 OVN 介绍OVN的架构OVN 应用OVN 信息流配置数据状态信息 Chassis 设置逻辑网络 OVN 介绍 Open vSwitch xff08 OVS xff09 是一款开源的 虚拟交换机 xff0c 控制协议方面它不但支持
  • STM32Cube的串口设置(二)一个串口接收另一个串口发送

    串口系列 STM32Cube的串口设置 xff08 一 xff09 即学即用 通过串口设置第一部分大家应该基本会使用单个串口进行收发了 所以本次介绍通过串口进行转发 适合情景为一个串口设备波特率为38400 xff0c 但是接收模块仅支持1
  • OVN 安装,使用,流表分析

    文章目录 OVN 安装环境准备安装 OVN 安装 环境准备 两台 ubuntu 18 04 管理网络 172 18 22 0 24 172 18 22 197 192 168 22 198 安装 apt get update apt get
  • OVN 流表基础 -- 基于 kubeOVN (一)

    文章目录 Kubectl ko 工具分析Nbctl SbctlTrace Ovn 流表MatchActionRegisterTable 介绍Logical Switch DatapathsLogical Router Datapaths K
  • linux(ubuntu)下杀毒软件clamav的安装使用

    可以使用套装命令 apt y install clamav clamtk clamav daemon clamdscan device tree compiler 也可以挨个安装 apt y install clamav apt y ins
  • npm 使用安装超时的解决办法

    在安装vue的过程中 xff0c 每每用到npm的时候都会超时 xff0c 必须使用淘宝镜像 永久使用 npm config set registry https registry npm taobao org 临时使用 npm insta
  • 树莓派4b连接手机热点wifi及远程桌面连接

    写在前面 xff1a 本人也是初步使用树莓派 xff0c 文中出现的好多问题基本都是查CSDN的各路大佬解决的 xff0c 如果说能够帮到你就很开心啦 使用教程 xff1a 1 SD卡上烧写操作系统 xff1a xff08 1 xff09
  • 《元学习meta learning)》2020综述论文大全!

    导读 元学习旨在学会学习 xff0c 是当下研究热点之一 最近来自爱丁堡大学的学者发布了关于元学习最新综述论文 Meta Learning in Neural Networks A Survey xff0c 值得关注 xff0c 详述了元学
  • Python文件读写时的换行符与回车符

    1 背景知识 ASCII码中的换行符与回车符 xff1a 换行符 10 LF 39 n 39 回车符 13 CR 39 r 39 在操作系统的历史中 xff0c 有很多种方法来表示另起一行 xff0c 但 39 n 39 和 39 r 39
  • Webpack5学习笔记(基础篇五)—— mode之Development环境相关参数配置

    在Webpack5中 xff0c mode xff08 模式 xff09 有三种 xff1a development xff08 开发环境模式 xff09 production xff08 生产环境模式 xff09 none或 39 39
  • mac安装nvm报错 curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused解决方案

    每次在使用新电脑时 xff0c 都要配置一些东西 xff0c 今天才使用Mac按照nvm官网提示安装nvm时 xff0c 就碰到了报 curl 7 Failed to connect to raw githubusercontent com
  • OpenStack版本 - 发布时间 - 及其组件

    Austin xff08 2010 10 xff09 xff1a Nova Glance Keystone Horizon Swift QuantumBexar xff08 2011 02 xff09 xff1a Nova Glance K
  • 总结:数据清洗的一些总结

    前言 在整理项目的时候发现清洗过程是一个非常细节的过程 xff0c 几乎贯穿始终 xff0c 也是后续步骤特征提取等的前置条件 xff0c 所以整理如下 因为展开较大 xff0c 所以我已近上传mindnode脑图和原始照片尺寸 xff0c
  • Ubuntu18.04+Melodic+UR5

    文章目录 配置与使用文件内容ur gazebo ur5 ROS Gazebo pickup 配置与使用 https github com ros industrial universal robot有详细说明 用Gazebo roslaun
  • cuda10.0 安装torch1.7.1

    pip install torch1 7 1 43 cu92 torchvision0 8 2 43 cu92 torchaudio 61 61 0 7 2 f https download pytorch org whl torch st
  • 对抗训练

    文章目录 1 定义2 对抗训练 xff1a 从CV到NLP2 1 CV中的数据格式2 2 NLP中数据格式 xff13 对抗样本与数据增强样本 xff14 如何确定微小扰动 xff14 1 Fast Gradient Sign Method
  • 38、带参数的装饰器

    一 带参数的装饰器 我们看 xff0c 装饰器其实就是一个闭包函数 xff0c 再说简单点就是两层的函数 那么是函数 xff0c 就应该具有函数传参功能 login status 61 39 username 39 None 39 stat