首页 > 编程语言 >python装饰器

python装饰器

时间:2024-07-08 11:10:23浏览次数:14  
标签:name python wrapper decorate func 装饰 def

# 装饰器:为了增强某个func的功能,但又不修改func的内部实现。装饰器是"a = func()的拓展延申:函数对象可以赋值给变量"
# 写法:def 装饰器名(被修饰的func名):def wrapper(*args,**kw):func(*args,**kw)。以下是装饰器的基本实现

# 装饰器基础使用:对func函数装饰
# 把@decorate放到func()的定义处,相当于执行了func = decorate(func)
def decorate_func_name(func):
    def wrapper(*args,**kwargs):        # wrapper装饰器里对func进行扩展的函数,返回func的执行结果(return func())
        print("before wrapper")
        t = func(*args,**kwargs)
        print("after wrapper")
        return t
    return wrapper      # 返回装饰器的执行结果

# 装饰器进阶使用:对装饰器传入自定义参数(注意:不是对被修饰函数func传参,是对装饰器decorate传参)。做法:在原来的decorate外面再套一层用来传参,在wrapper里处理传入的参数
# 把@login(name="t",pwd="t")放到func()的定义处,相当于执行了func = login(name="t",pwd="t")(func)
def login(name="admin",pwd="123456"):
    def decorate(func):
        # @functools.wraps(func):加在decorate内、wrapper函数上,然后可以在wrapper内通过func.__name__得到被装饰函数func的信息
        @functools.wraps(func)
        def wrapper(*args,**kw):
            print("rec param:"+name, pwd)
            print("before wrapper,funcName:"+func.__name__)
            t = func(*args, **kw)
            print("after wrapper")
            return t
        return wrapper
    return decorate

 

标签:name,python,wrapper,decorate,func,装饰,def
From: https://www.cnblogs.com/jinziguang/p/18289521

相关文章

  • 用Python动手学机器学习
    代码和PDF等:GitHub-guozhe1992/read学习环境的搭建:书中首先指导读者如何搭建学习机器学习的Python环境,包括必要的库和工具的安装与配置。Python基础知识:介绍Python编程的基础知识,包括变量、数据类型、控制流、函数等,为后续的机器学习编程打下基础。机器学习基础知识:阐述机器......
  • 单链表在Python中的实现技巧详解
    概要链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据域和一个指向下一个节点的指针。链表的优点是插入和删除操作非常高效,特别是在需要频繁修改数据结构的情况下。本文将详细介绍如何在Python中创建单链表,并包含相应的示例代码,帮助全面掌握这一基础而重要......
  • Python数据预处理技术指南大全【文末送书】
    文章目录Python数据预处理技术指南Python数据预处理【文末送书】Python数据预处理技术指南数据预处理是数据分析和机器学习工作流中非常关键的一步。通过对原始数据进行清洗、转换和格式化,能大幅提升模型的性能和准确性。本篇文章将介绍一些常用的Python数据预处理......
  • Python 进度条tqdm
     在编写Python脚本时,尤其是那些需要处理大量数据或者执行耗时操作的脚本,监控任务进度是非常重要。tqdm的安装pipinstalltqdm-ihttps://pypi.tuna.tsinghua.edu.cn/simple/基本用法fromtqdmimporttqdmimporttimeforiintqdm(range(100)):time.slee......
  • SSM-企业人事信息管理系统-98194(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、
    企业人事信息管理系统的设计与实现摘 要由于数据库和数据仓库技术的快速发展,企业人事信息管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。人事管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。企业人事......
  • R包:reticulate R对python的接口包
    介绍1R和python是两种不同的编程语言,前者是统计学家发明并且服务数学统计计算,后者则是最万能的胶水语言。随着大数据时代的到来,两者在数据分析领域存在越来越多的共同点且可以相互使用,为了破解二者的编程壁垒,CRAN收录了具有R接口的python包,从而使得两类语言的数据能共同使......
  • [oeasy]python024_vim读取文件_从头复制到尾_撤销_重做_reg_寄存器
    Guido的简历......
  • python+flask计算机毕业设计高校学生实习信息管理(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及与深化,高校学生实习已成为连接理论与实践、校园与社会的关键桥梁。然而,传统的实习信息管理方式往往依赖于纸质文档或简......
  • python随笔day03
    python面试基础问题lambda表达式基本语法:变量=lambda[参数列表]:表达式(函数代码+返回值)#调用变量()例子如下:#加法求和函数a=lambdaa,b:a+bprint(a(1,2))#3#args元组类型b=lambda*args:argsprint(b('a','b','c','d',10))#('a','b&......
  • Python网络爬虫:Scrapy框架的全面解析
    Python网络爬虫:Scrapy框架的全面解析一、引言        在当今互联网的时代,数据是最重要的资源之一。为了获取这些数据,我们经常需要编写网络爬虫来从各种网站上抓取信息。Python作为一种强大的编程语言,拥有许多用于网络爬虫的工具和库。其中,Scrapy是一个功能强大且灵......