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

python-装饰器

时间:2022-11-14 20:45:52浏览次数:36  
标签:函数 python work func print 装饰 def

装饰器: 装饰器可以用来做什么?    作用:可以在不修改功能函数内部代码的情况下,给功能函数进行扩展的新 功能(对开放封闭原理)   1.装饰器可以给当前的功能进行扩展增加新的功能   2.装饰器可以给当前的函数增加赋予属性   3.对扩展开放:意味着有新的需求或变化时,可以对现有的系统进行扩展 ,以适应新的情况。   4.对修改关闭:在扩展原有系统的功能时,只需增加新的代码,而不需要 对原有的代码进行修改   如何去定义一个装饰器?

    1.闭包装饰器的实现:
    def 外层函数(func):
        def 内层闭包函数():
            #函数执行前需要扩展的功能代码
            func() 被修饰的函数
            #函数执行后需要扩展的功能代码
        
        return 内层闭包函数
        

(扩展新的功能)闭包装饰器解析:

""" 装饰器传参数:::
1.第一层参数,用来接收装饰器的参数
2.第二层参数,用来接收被调用的函数
3.第三层参数,用来接收被装饰函数的参数


"""

def man_xing(name,age):
    def func(item):
        def func1(*args, **kwargs):
            print("前置条件",name )
            res = item(*args, **kwargs)
            print("后置条件",age)
            return res
        return func1
    return func


@man_xing("manxing",18)
def work():
    print("-------work---------")

work()

(添加属性)装饰器解析:

def work():
    pass

print(work.__dict__) {}
打印函数的属性字典是一个空的dict


# 定义一个装饰器,给函数赋予datas属性
def data(func):
func.datas = "nihao"
return func

#进行修饰
@data
def work():
pass

# 输出属性字典
print(work.__dict__) #{'datas': 'nihao'}

  

 

标签:函数,python,work,func,print,装饰,def
From: https://www.cnblogs.com/manxingsir/p/16890331.html

相关文章

  • 力扣278(java&python)-第一个错误的版本(简单)
    题目:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本......
  • python 多进程 多线程 协程
    多进程-进程池1fromconcurrent.futuresimportProcessPoolExecutor23withProcessPoolExecutor(max_workers=10)asexecutor:4results=executor.map......
  • 从新开始学Python - 字符串扩展3
    字符串定义方法单引号双引号三个双引号,例如"""Python学习"""三个双引号与多行注释相同,也可以支持换行,如果不用变量接受,则为多行注释,如果用变量接受,则为字符串、......
  • 20221114-python字符串
    1.字符串定义:    2.字符串的转义符    3.字符串的拼接:      4.字符串的下标:    5.字符串的切片 ......
  • 基于TensorFlow和Python的机器学习(笔记4)
    基于TensorFlow和Python的机器学习(笔记4)    lossMSE=MeanSquaredError均方差 Entropy熵CrossEntropy交叉熵熵越大,越不稳定,惊喜度越高......
  • 用Python解析dolphinscheduler的json并存入到mysql
    第一步连接dolphinscheduler数据库SELECT*FROMdolphinscheduler2.t_ds_process_definitionWHEREproject_id=150005;把process_definition_json值的内容复制出来,保......
  • Python之requests模块-大文件上传
    最近在做接口测试时,拿到一个分片上传文件的接口,http接口请求头中的Content-Type为multipart/form-data。需要在客户端将大文件分片成数据块后,依次传给服务端,由服务端还原成......
  • Python实验报告(第11周)
      实验11:模块一、实验目的和要求1、学会自定义模块;2、学会引用其他模块;3、学会创建和使用包。二、实验环境软件版本:Python3.1064_bit三、实验过程1、实例1:......
  • python-错误和异常-常见错误
    1.无效语法#coding=utf-8;a=“python”;printa;运行结果:a=“python”;^SyntaxError:invalidsyntax分析:“”使用的是中文格式。2.ZeroDivisionEr......
  • Python代码写得丑怎么办?推荐几个神器拯救你
    Python编程语言需要遵循PEP8规范,但是初学者往往记不住这个规范,代码写得比较丑。本文推荐几个神器来拯救奇丑无边的python代码。一、Jupyternotebook篇Jupyternotebook的......