python 装饰器 带参数和不带参数

装饰器是Python语言中一种特殊的语法,用于在不修改原函数代码的情况下,为函数添加额外的功能或修改函数的行为。通过装饰器,我们可以在函数执行前后执行一些额外的代码,或者修改函数的参数。

要使用装饰器引入函数和参数,可以按照以下步骤进行:

  1. 定义装饰器函数:装饰器函数是一个普通的Python函数,它接受一个函数作为参数,并返回一个新的函数。装饰器函数通常使用@符号放在被装饰函数的定义之前,表示该函数将被装饰。
  2. 在装饰器函数内部定义新的函数:在装饰器函数内部,可以定义一个新的函数,用于包裹原函数,并在包裹函数中添加额外的功能。
  3. 在包裹函数中调用原函数:在包裹函数中,可以调用原函数,并传递原函数的参数。
  4. 返回包裹函数:在包裹函数的最后,需要返回包裹函数本身。

 

全局定义参数传参

def decorator_function(names):def inner_wrapper(func):def wrapper():result = func()return result + f"""my class student's name is {"、".join(names)};"""return wrapperreturn inner_wrappernames = ["Mike", "David", "Jhon"]
@decorator_function(names)
def generate_code():return f" I'm a teacher! "result_str = generate_code()
print(result_str)

不带参数,这里的names为全局参数

def subnormal_saturation_decorator(func):def wrapper(*args, **kwargs):result = func(*args, **kwargs)return result + f"""my class student's name is {"、".join(names)};"""return wrappernames = ["Mike", "David", "Jhon"]
@subnormal_saturation_decorator
def generate_code():return f" I'm a teacher!"result_str = generate_code()
print(result_str)

通过方法传参

def subnormal_saturation_decorator(func):def wrapper(names,*args, **kwargs):result = func(names,*args, **kwargs)return result + f"""my class student's name is {"、".join(names)};"""return wrapper@subnormal_saturation_decorator
def generate_code(names):print(names)return f" I'm a teacher!"result_str = generate_code(["Mike", "David", "Jhon"])
print(result_str)

调用使用装饰器的方法,带传参 

# 装饰器
def subnormal_saturation_decorator(func):def wrapper(names,*args, **kwargs):result = func(names,*args, **kwargs)return result + f"""my class student's name is {"、".join(names)};"""return wrapper# 使用装饰器的方法
@subnormal_saturation_decorator
def generate_code(names):print(names)return f" I'm a teacher!"# 调用使用装饰器方法的方法
def supper_func():names = ["Mike", "David", "Jhon"]return generate_code(names)result_str = supper_func()
print(result_str)

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux_应用篇(07) 系统信息与系统资源

在应用程序当中,有时往往需要去获取到一些系统相关的信息,譬如时间、日期、以及其它一些系统相关信息,本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取系统信息, 譬如获取系统时间、日期以及设置系统时间、日期等&#x…

restTemplate返回报文乱码问题

默认服务端使用UTF8编码 排查1&#xff1a; 请求前手动设置UTF-8编码解析报文 RestTemplate restTemplate new RestTemplate(); restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); ResponseEntity<String> excha…

三能一体运营体系助力政企支撑水平提升

生产力的发展是现代社会孜孜不倦的追求&#xff0c;由此产生了我们熟悉的“机械化、电子化、信息化”乃至现今正在发生的“智能化”四次工业革命。这些是由技术的突破性发展带来的&#xff0c;但我们也注意到生产力发展的另一个助力&#xff0c;即生产效率的提升&#xff0c;19…

【MySQL数据库】mysql日志管理、备份与恢复

mysql日志管理、备份与恢复 MySQL数据库备份及日志一、数据库备份分类&#xff1a;如何选择逻辑备份策略 (频率)完全备份与恢复备份恢复 增量备份与恢复实现增量备份 基于时间点与位置恢复 二.MySQL日志管理 MySQL数据库备份及日志 在生产环境中&#xff0c;数据的安全性是至关…

在未来你将何去何从?

在数字化的浪潮中&#xff0c;信息技术行业无疑是推动全球经济和社会发展的重要动力。随着科技的不断迭代与进步&#xff0c;云计算、大数据、人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;、5G通信和区块链等技术已经深入到我们生活的每一个角落&am…

鸿蒙原生应用元服务开发-鸿蒙真机运行项目实战与注意事项

一、解压项目注意项目包不能为中文 二、用数据线将装好DevEco Studio的电脑与设置为开发者模式的鸿蒙手机相连接。 三、将项目包托进DevEco Studio 中 注意项目包文件不能有嵌套 四、查看设备运行 五、点击项目结构 六、勾选红色框圈部分 登录开发者账号 七、选择好公司 八、等…

我是如何使用 Next.js14 + Tailwindcss 重构个人项目的

前言 去年在学习 React 和 Nest 的时候&#xff0c;参考了大佬 imsyy 的项目 DailyHot&#xff0c;以此项目的灵感基于 React 开发&#xff0c;完成之后就没怎么在意。 后来发现这个项目还有点小流量&#xff0c;每天差不多 200-400 的 IP 访问量&#xff1a; 我又抽时间优…

深度学习之基于Pytorch框架手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是数字图像处理领域的一个经典问题&#xff0c;也是深度学习技术的一个常用应用场…

AWS计算之Amazon Lightsail

Amazon Lightsail是亚马逊提供的一种简化的虚拟私有服务器(VPS)服务&#xff0c;旨在帮助开发人员快速、轻松地搭建和管理虚拟服务器。Lightsail提供了预配置地计算资源、网络、存储和数据传输选项&#xff0c;用户可以通过简单的界面选择所需的配置&#xff0c;轻松部署应用程…

51汇编--数码管时钟

实现一个24小时制的电子钟程序&#xff0c;在实验箱的6个数码管上显示时分秒&#xff08;用定时器0中断更新计时时间&#xff0c;时间值以压缩BCD码形式保存在内部RAM的30H31H和32H单元&#xff09;。 PC机可通过串行口发送要设置的时间给单片机&#xff08;发送的时间格式为压…

java 重写接口的default方法

在Java 8中&#xff0c;接口可以包含默认方法&#xff08;default methods&#xff09;&#xff0c;这些方法可以有默认实现。如果一个类实现了包含默认方法的接口&#xff0c;并且没有提供这个方法的实现&#xff0c;则会使用接口中的默认实现。 如果需要重写接口中的默认方法…

【MySQL精通之路】SQL优化(1)-查询优化(11)-多范围查询优化

主博客&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化(10)-外部联接简化-CSDN博客 下一篇&#xff1a; 当基表很大且未存储在存储引擎的缓存中时&#xff0c;使用辅助索引上的范围扫描读取行可能会…

uniappx 获取设备唯一标识(OAID、AAID、AndroidID、IMEI等) Ba-IdCode-U

简介&#xff08;下载地址&#xff09; Ba-IdCode-U 是一款可以获取国内各大手机厂商 OAID&#xff08;开放匿名设备标识&#xff09;及海外手机平台 AAID&#xff08;安卓广告标识&#xff09;的uniapp插件。另外也支持获取 IMEI/MEID、AndroidID、WidevineID、PseudoID、GUI…

Spring Cloud Alibaba-06-Sleuth链路追踪

Lison <dreamlison163.com>, v1.0.0, 2024.4.03 Spring Cloud Alibaba-06-Sleuth链路追踪 文章目录 Spring Cloud Alibaba-06-Sleuth链路追踪为什么使用链路追踪常见链路追踪解决方案Sleuth概述概述Sleuth术语 Sleuth Zipkin 原理Sleuth原理简述Zipkin 原理简述 Sleut…

Python库之`lxml`的高级用法深度解析

Python库之lxml的高级用法深度解析 简介 lxml是一个功能强大的第三方库&#xff0c;它提供了对XML和HTML文档的高效处理能力。除了基本的解析和创建功能外&#xff0c;lxml还包含了一些高级用法&#xff0c;这些用法可以帮助开发者在处理复杂文档时更加得心应手。 高级解析技…

代码随想录——路径总和(Leetcode113)需要回顾

题目链接 递归 本题递归需要遍历整棵树&#xff0c;所以递归没有返回值 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* T…

苹果M4性能分析:进步神速?还有多少空间?

2024年初&#xff0c;苹果推出了M4处理器&#xff0c;令人意外的是&#xff0c;它的发布距离M3发布仅仅过去了半年时间。更让人惊讶的是&#xff0c;M4首次亮相于iPad Pro。这一新处理器不仅仅是M3的简单升级版本&#xff0c;而是一次全面的架构优化。本文将详细分析M4处理器的…

Vue基础(1)数据绑定

一. 文本插值 普通文本可以使用双大括号 {{ }} &#xff0c;要想插入 HTML&#xff0c;需要使用 v-html 指令。 <template><h1>Message: {{ state.msg }}</h1><p>{{ state.count 1 }}</p><p>{{ state.rawHtml }}</p><p v-html…

【教学类-58-02】黑白三角拼图02(3*3宫格)262144种

背景需求&#xff1a; 已知黑白三角拼图2*2&#xff08;4个拼图&#xff09;一共有256种排列方法 【教学类-58-01】黑白三角拼图01&#xff08;2*2宫格&#xff09;256种-CSDN博客文章浏览阅读142次&#xff0c;点赞5次&#xff0c;收藏12次。【教学类-58-01】黑白三角拼图01…

深度学习之基于Matlab卷积神经网络(CNN)手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是计算机视觉领域的一个重要问题&#xff0c;也是深度学习应用的一个典型场景。卷…