惬意上手Python —— 装饰器和内置函数
1. Python装饰器
Python中的装饰器是一种特殊类型的函数,它允许用户在不修改原函数代码的情况下,增加或修改函数的行为。
具体来说,装饰器的工作原理基于Python的函数也是对象这一事实,可以被赋值给变量、作为参数传递给其他函数或者作为其他函数的返回值。装饰器通常接受一个函数作为输入,并返回一个新的函数,这个新函数通常会包含原函数的一些额外功能。
1.1 闭包
闭包是一个函数与其相关的词法环境的结合,这使得该函数可以在外部作用域中访问本地于其创建环境的变量和参数。
简单来说,闭包就是函数嵌套函数,内部函数可以使用外部函数的变量。下面是一个简单的示例。
def outer_function(x):def inner_function(y):return x + yreturn inner_functionclosure = outer_function(10)
print(closure(5)) # 输出 15
在这个例子中,outer_function是一个外部函数,它接受一个参数 x并返回一个内部函数inner_function。inner_function是一个闭包,因为它可以访问到其创建环境的变量x。当我们调用outer_function(10)时,它返回一个新的函数closure,这个函数可以访问到外部函数的变量x。然后我们调用closure(5),实际上就是调用inner_function(5),并将x的值设为10,因此最终输出结果为15。
1.2 Python装饰器
实现一个装饰器通常需要以下几个步骤:
- 定义装饰器函数:首先,我们需要定义一个装饰器函数,它接受一个函数作为参数,并返回一个新的函数。这个新的函数通常会包含原始函数的调用和一些额外的操作。
- 创建内部函数:在装饰器函数中,我们需要创建一个内部函数,它的作用是封装原始函数的调用和额外的操作。这个内部函数可以接收任意数量的参数和关键字参数,以便能够处理原始函数的调用。
- 调用原始函数:在内部函数中,我们首先调用原始函数,并将其结果保存到一个变量中。然后,我们可以对原始函数的结果进行一些额外的操作,例如修改、过滤或记录日志等。
- 返回新函数:最后,我们将内部函数返回为新的函数。这个新的函数将替代原始函数,并在被调用时执行内部函数的逻辑。
- 应用装饰器:一旦装饰器函数定义完成,我们就可以将其应用到需要装饰的函数上。这可以通过使用
@语法来实现,或者通过显式地将装饰器函数作为参数传递给原始函数。
def my_decorator(func):def wrapper(*args, **kwargs):print("Before function call")result = func(*args, **kwargs)print("After function call")return resultreturn wrapper@my_decorator
def my_function():print("Inside function")my_function()
在这个例子中,my_decorator是一个装饰器函数,它接受一个函数作为参数并返回一个新的函数。这个新的函数被称为wrapper,它会在调用原始函数之前和之后执行一些额外的操作。
我们使用@my_decorator语法来应用装饰器到my_function函数上。当我们调用my_function()时,实际上是调用了wrapper()函数,并在其中执行了原始的my_function()函数。
输出结果:
Before function call
Inside function
After function call
下面的代码是一个使用多个装饰器的代码,希望能帮助到你:
import timedef demo1(fun):def demo2():print("demo2中层开始")fun()time.sleep(2)print('睡了两秒,demo2中层结束')return demo2def demo3(fun):def demo4():print("demo4外层开始")start = time.time()fun()print("用时:", abs(start - time.time()))print("外层结束")return demo4@demo3
@demo1
def demo5():print("demo5内层开始")while True:if int(input("输入7,内层才会结束")) == 7:breakprint("内层结束")demo5()
输出结果:
demo4外层开始
demo2中层开始
demo5内层开始
输入7,内层才会结束1
输入7,内层才会结束2
输入7,内层才会结束7
内层结束
睡了两秒,demo2中层结束
用时: 14.538939952850342
外层结束
在这个例子中,demo1和demo3是两个装饰器,它们分别在demo5函数执行前后添加了一些打印语句和计时功能。demo5函数是一个无限循环,等待用户输入数字7才会结束。
这个函数被demo1和demo3装饰器修饰后,会在执行前后添加额外的打印语句和计时功能。这样,当我们调用demo5函数时,实际上是在执行经过装饰后的函数,从而实现了在不修改原函数代码的情况下为其添加额外功能的目的。
当使用多个装饰器时,哪个装饰糖(就是带@的语句)离函数进,就先执行哪个。
其实说白了装饰就是添加功能,进入哪个装饰器,就会添加哪个装饰器内部函数的语句,这就叫装饰。
2. Python内置函数
Python中的聂志函数很多,不便一一解释,下面仅举几个常用的函数为例子。
1.len():计算字符串、列表、元组等长度。
s = "hello"
print(len(s)) # 输出:5
2.type():获取变量的类型。
a = 123
print(type(a)) # 输出:<class 'int'>
3.str():将其他类型的数据转换为字符串类型。
num = 123
print(str(num)) # 输出:"123"
4.list():将可迭代对象转换为列表类型。
tup = (1, 2, 3)
print(list(tup)) # 输出:[1, 2, 3]
5.tuple():将可迭代对象转换为元组类型
lst = [1, 2, 3]
print(tuple(lst)) # 输出:(1, 2, 3)
6.dict():将键值对序列转换为字典类型。
items = [("key1", "value1"), ("key2", "value2")]
print(dict(items)) # 输出:{'key1': 'value1', 'key2': 'value2'}
7.set():将可迭代对象转换为集合类型。
lst = [1, 2, 3, 3]
print(set(lst)) # 输出:{1, 2, 3}
8.range():生成一个整数序列。
for i in range(5):print(i) # 输出:0 1 2 3 4
9.enumerate():同时返回可迭代对象的索引和元素。
lst = ["apple", "banana", "orange"]
for index, value in enumerate(lst):print(index, value) # 输出:0 apple,1 banana,2 orange
10.zip():将多个可迭代对象的元素打包成一个个元组,然后返回由这些元组组成的列表。
names = ["Tom", "Jerry", "Mike"]
ages = [18, 20, 22]
print(list(zip(names, ages))) # 输出:[('Tom', 18), ('Jerry', 20), ('Mike', 22)]
over,持续更新中🌹🌹🌹

相关文章:
惬意上手Python —— 装饰器和内置函数
1. Python装饰器 Python中的装饰器是一种特殊类型的函数,它允许用户在不修改原函数代码的情况下,增加或修改函数的行为。 具体来说,装饰器的工作原理基于Python的函数也是对象这一事实,可以被赋值给变量、作为参数传递给其他函数或者作为其他…...
python 调用dll
在Python中,可以使用ctypes库来调用DLL文件。ctypes库是一个标准库,用于在Python中加载共享库(例如DLL文件)并调用其中的函数。 以下是一个简单的示例,演示如何使用ctypes库调用DLL文件中的函数: import c…...
docker里Java服务执行ping命令模拟流式输出
文章目录 业务场景处理解决实现ping功能并实时返回输出实现长ping和中断请求docker容器找不到ping命令处理 业务场景 我们某市的客户,一直使用CS版本的信控平台,直接安装客户Windows server服务器上,主要对信号机设备进行在线管理、方案配时…...
代码随想录算法训练营第十三天| 239. 滑动窗口最大值 、347.前 K 个高频元素
239. 滑动窗口最大值 思路: 用遍历区间的元素时,维护一个单调队列,从大到小排列。 要找到最大值,实际单调队列保存区间内最大值及最大值右侧的第二大值(用于当前最大值处于区间左端,在区间右移时更新临时最…...
旋转花键的使用寿命与机械原理分析
旋转花键是一种传动部件,广泛应用于各种机械设备中。对于厂商来说,如何保证使用寿命是重中之重,而旋转花键的使用寿命与其机械原理密切相关,了解其机械原理有助于更好地维护和使用旋转花键,从而提高其使用寿命。 旋转花…...
互联网摸鱼日报(2024-01-22)
互联网摸鱼日报(2024-01-22) 开源中国资讯 Stability AI 推出更小、更高效的 1.6B 语言模型 X 正面向 Android 推出音频和视频通话 Extism —— WebAssembly 插件实现框架 Gitee 推荐 | 龙蜥社区最佳安全加固实践指南 security-benchmark 每日一博 | 得物云原生容器技术探…...
CentOS 7 安装配置MySQL
目录 一、安装MySQL编辑编辑 1、检查MySQL是否安装及版本信息编辑 2、卸载 2.1 rpm格式安装的mysql卸载方式 2.2 二进制包格式安装的mysql卸载 3、安装 二、配置MySQL 1、修改MySQL临时密码 2、允许远程访问 2.1 修改MySQL允许任何人连接 2.2 防火墙的问题 2…...
Gold-YOLO(NeurIPS 2023)论文与代码解析
paper:Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism official implementation:https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 存在的问题 在过去几年里,YOLO系列已经…...
多个coco数据标注文件合并
一、coco数据集是什么? COCO(Common Objects in Context)是一个用于目标检测和图像分割任务的标注格式。如果你有多个COCO格式的JSON文件,你可能需要将它们合并成一个文件,以便更方便地处理和管理数据。在这篇博客中&…...
Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)
以两数相加求和为例,在kubernetes集群拉取本地的镜像,实现如下效果: 1.实现两数相加求和 2.可以通过curl实时调用,参数以GET方式提供,并得到结果。(类似调用函数) 一、实现思路 需要准备如下的…...
k8s使用ingress实现应用的灰度发布升级
v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx,来测试灰度发布实现过程 一、方案:使用ingress实现应用的灰度发布 1、服务端:正常版本v1,灰度升级版本v2 2、客户端:带有请求头versionv2标识的请求访问版…...
最新热门商用GPT4.0带MJ绘画去授权版本自定义三方接口(开心版)
一台VPS 搭建宝塔 解析域名 上传程序至根目录 访问首页在线安装配置数据库 PHP版本选择:7.3 安装完成后访问网站首页即可! 配置APIKEY,登录网站后台自定义配置,不然网站无法使用! 网站后台地址/admin 默认账号:admin 密码…...
Halcon基于形状的模板匹配inspect_shape_model
Halcon基于形状的模板匹配 基于形状的匹配,就是使用目标对象的轮廓形状来描述模板。Halcon中有操作助手,可以直观 地进行形状模板匹配的参数选择以及效果测试。如果使用算子编写,步骤如下。 (1)从参考图像上选择检测的…...
html中根元素以及根元素字体的含义
在 HTML 中,根元素是指 <html> 标签,可以使用 CSS 来设置根元素的字体大小。根元素的字体大小会影响整个页面的文本内容,默认情况下,根元素的字体大小是浏览器默认的大小。 要设置根元素的字体大小,你可以使用 …...
51单片机1-6
目录 单片机介绍 点亮一个LED 流水灯参考代码 点亮流水LEDplus版本 独立按键 独立按键控制LED亮灭 静态数码管 静态数码管显示 动态数码管显示 模块化编程 调试工具 矩阵键盘 矩阵键盘显示数据 矩阵键盘密码锁 学习B站江协科技课程笔记。 安装keil,下…...
vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理
vue2状态管理Vuex Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态,以及规则保证状态只能按照规定的方式进行修改。 State(状态):Vuex 使用单一状态树,即一个对象包含全部的应用层…...
用户画像项目背景
1,用户画像项目介绍 大数据平台简介 数据仓库+用户画像+推荐系统 (1)数据仓库:加快数据的分析和查询 数据仓库分层:ODS层(映射HDFS的数据)—DW(数据仓库层)–APP(层)—BI(层) DW:DWD明细数据层(数据的清洗和转换),DWM(轻度聚合层),DWS(高度聚合),APP(层),DIM(层) …...
Go使用记忆化搜索的套路【以20240121力扣每日一题为例】
题目 分析 这道题很明显记忆化搜索,用py很容易写出来 Python class Solution:def splitArray(self, nums: List[int], k: int) -> int:n len(nums)# 寻找分割子数组中和的最小的最大值s [0]for num in nums:s.append(s[-1] num)#print(s)cachedef dfs(cur,…...
【LeetCode】每日一题 2024_1_21 分割数组的最大值(二分)
文章目录 LeetCode?启动!!!题目:分割数组的最大值题目描述代码与解题思路 LeetCode?启动!!! 今天是 hard,难受,还好有题解大哥的清晰讲解 题目&a…...
bevy the book 20140118翻译(全)
源自:Bevy Book: Introduction 主要用 有道 翻译。 Introduction 介绍 Getting Started 开始 Setup 设置 Apps 应用程序 ECS Plugins 插件 Resources 资源 Next Steps 下一个步骤 Contributing 贡献 Code 代码 Docs 文档 Building Bevys Ecosystem 构建 b…...
PyTorch模型的TensorRT优化:原理与实践
PyTorch模型的TensorRT优化:原理与实践 1. 背景与意义 在深度学习模型部署过程中,推理速度是一个关键指标。TensorRT是NVIDIA开发的高性能深度学习推理优化库,它可以显著提高模型的推理速度,降低延迟。本文将深入探讨TensorRT的工…...
Linux下安装SimSun字体的完整指南(附常见问题排查)
Linux下安装SimSun字体的完整指南(附常见问题排查) 在Linux系统中处理中文字体一直是个让开发者头疼的问题。不同于Windows系统预装了丰富的中文字体,大多数Linux发行版默认只包含基础的字体库。当我们需要处理中文文档、开发中文界面或运行某…...
UniApp项目实战:用UTS插件实现安卓后台保活(附完整Service配置与权限处理)
UniApp安卓后台保活实战:UTS插件与Service优化全解析 在移动应用开发中,后台任务保活一直是开发者面临的棘手问题。想象一下:你的UniApp应用需要持续获取用户位置、实时推送消息或播放音乐,却频繁被系统清理,用户体验直…...
互联网大厂最全 Java 面试八股文题库
纵观几年来的 Java 面试题,你会发现每家都差不多。你仔细观察就会发现,HashMap 的出现几率未免也太高了吧!连考察的知识点都一样,什么 hash 碰撞啊,并发问题啊!再比如 JVM,无外乎考内存结构&…...
无需Root!用KSWEB在旧安卓手机上搞个私人服务器:文件共享+内网穿透实战
无需Root!用KSWEB在旧安卓手机上搭建全能私人服务器 家里闲置的安卓手机别急着扔,只需安装一个KSWEB应用,就能变身为功能齐全的私人服务器。这个方案特别适合想低成本搭建家庭NAS、个人云存储或测试环境的极客用户。相比动辄上千元的专业NAS设…...
5款强力资源获取工具深度评测:猫抓媒体解析技术如何重塑内容管理流程
5款强力资源获取工具深度评测:猫抓媒体解析技术如何重塑内容管理流程 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容爆炸的时代,高效获取和管理网络媒体资源已成为…...
FLUX.1-dev-fp8-dit文生图GPU高性能部署:FP8+Triton内核优化推理延迟实测
FLUX.1-dev-fp8-dit文生图GPU高性能部署:FP8Triton内核优化推理延迟实测 最近在折腾AI图像生成,发现了一个性能怪兽——FLUX.1-dev-fp8-dit模型。这名字听起来有点复杂,简单说,它是一个专门为GPU优化过的文生图模型,主…...
Windows下用rclone挂载S3存储到本地磁盘的完整指南(含MinIO/Ceph配置)
Windows下用rclone挂载S3存储到本地磁盘的完整指南(含MinIO/Ceph配置) 在数据驱动的现代开发环境中,对象存储已成为基础设施的重要组成部分。无论是个人开发者处理海量数据集,还是企业团队协作处理云端资源,将S3兼容存…...
从Proteus仿真到普中开发板烧录:51单片机抢答器完整开发流程避坑指南
从Proteus仿真到普中开发板烧录:51单片机抢答器完整开发流程避坑指南 在电子设计的学习道路上,51单片机项目开发是一个经典的入门实践。抢答器作为典型的互动式电子系统,涵盖了输入检测、逻辑控制、显示输出等核心知识点,是检验学…...
RIME输入法词库改造指南:让你的THUOCL词库同时支持简体和港台繁体
RIME输入法词库改造指南:让你的THUOCL词库同时支持简体和港台繁体 在中文输入法的世界里,RIME以其高度可定制性赢得了技术爱好者的青睐。但当我们面对不同地区的中文用户时,一个棘手的现实问题浮现:如何让单一词库同时满足大陆简…...
