python装饰器不错的教程

2024-06-05 10:38
文章标签 python 教程 不错 装饰

本文主要是介绍python装饰器不错的教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

上面是按下按钮1就存款,否则则取款。

不对,存取款要输入密码啊!!!所以,我们要加密码验证代码。

进群:125240963   即可获取数十套PDF哦!

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

可以看到,虽然实现了密码验证功能,但是代码冗余度比较高,而且现在只模拟了取款和存款功能,然而还有查询功能,转账功能等等,那么冗余度就更高了,而且相对于取款和存款函数来说,复用性没有那么高,所以我们要进一步优化代码,把验证函数写到取款和存款函数内部。

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

有没有什么方法,可以在不改变原函数以及原函数的调用的情况下扩展原函数的功能呢?当然是有的,这就是python中著名的装饰器。还是使用上面的代码来演示

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

从现在开始,上面红框的代码不再进行更改,打死也不改,我们来实现有密码验证的存取款功能。

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

装饰器装饰有参函数

看下面这段代码

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

大家看看这段代码有没有什么问题?

运行结果

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

看报错原因就知道,inner()函数多了一个参数。大家一定要注意一点,因为装饰器函数的返回值是inner,也就是说现在myprint是等同于inner的。

我们来改一下代码

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

为了使装饰器能够装饰更多函数,我们进一步优化代码。

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

装饰器装饰有返回值函数

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

如图可以看到,无论被装饰的函数有无返回值,其结果都无返回值,原因其实很简单,因为inner()函数根本就没有返回值。为了实现有返回值的函数被装饰之后仍然有返回值,需要inner函数与被装饰函数的返回值保持一致。

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

可以看到,有返回值的函数被装饰之后依然有返回值,没有返回值的函数被装饰之后则没有返回值,符合我们想要的结果。

双重语法糖

为了更加直观地演示双重语法糖,我就不再使用上面的例子了。

我先来定义一个函数

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

现在我有一个需求,我想在'python小白联盟'的上面打印一行'='和一行'*',也就是要实现这种效果。

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

那么应该怎么写呢?大家可能都会想到语法糖的叠加,那叠加的方式是以下哪一种呢?

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

我们来运行一下就知道了

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

可以看到,叠加的方式应该是第一种,也就是说最外层的语法糖先执行。

带参数的语法糖

为了演示带参数的语法糖,我再把上面的一张图搬下来

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

显然,红框部分的代码冗余度比较高,我们可以使用带参的语法糖来进行简化

这是我见过最全面的Python装饰器详解!没有学不会这种说法!

 

装饰器就讲到这里,祝大家有个愉快的一天!

这篇关于python装饰器不错的教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032825

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',