Python知识分享第十八天

闭包和装饰器
函数名的作用
回顾
Python是一门以面向对象为编程思想的语言 一切皆对象
如果直接写函数名 = 对象
def get_sum():Q
a= 10
b = 20
return a + b
get_sum 对象
get_sum()函数调用
作用
1.函数名可以作为对象赋值给变量
my_sum = get_sum
2.函数名可以作为函数的实参进行传递
def mrthod(fn):
fn()
method(get_sum)
传入:函数对象
method(my_sum)
闭包
概述
函数嵌套的写法 内部函数可以直接使用外部函数的引用
作用
延长外部函数的局部变量的生命周期 即是外部函数执行完毕 内部函数依然可以使用其中的局部变量
前提条件
1.有嵌套
2.有引用
3.有返回
格式

        def 外部函数名(形参列表):.....def 内部函数名(形参列表):.....使用外部函数的变量return 内部函数名nonlocal关键字可以实现让内部函数 修改外部函数的改变值
装饰器概述属于闭包的一种写法目的 作用在不改变原函数的基础上 对其功能做增强格式def 外部函数名(形参列表):
def 内部函数名(形参列表):使用外部函数的变量额外功能return 内部函数名前提条件1.有嵌套2.有引用3.有新功能4.有返回装饰的格式思路1: 传统写法变量名= 装饰器名(被装饰的函数名)变量名()    #这里强调的是 装饰后的函数思路2:语法糖在原函数的声明上 加上@ 装饰器名即可之后就跟正常的调用函数一致记忆1.装饰器的内部函数的格式 必须要和被装饰的原函数格式 保持一致案例装饰器 装饰 无参无返回值的函数.装饰器 装饰 无参有返回值的函数.装饰器 装饰 有参无返回值的函数.装饰器 装饰 有参有返回值的函数.装饰器 装饰 不定长参数的函数.多个装饰器, 同时装饰某个函数带参数的装饰器, 装饰某个函数

(1)闭包的特点是什么?

“”"
函数嵌套的写法 内部函数可以直接使用外部函数的变量
延长外部函数的声明周期 外部函数执行完毕 内部函数依然可以使用外部函数的局部变量
前提条件 1. 有嵌套 2. 有引用 3. 有返回
若要修改外部函数的变量值 则需要用 nonlocal关键字修饰
“”"
import time

(2)什么是装饰器?装饰器有哪些特点?

“”"
装饰器是闭包的一种写法 目的是在不改变原函数的基础上 对其功能做增强
比闭包的前提条件多了一个 新增额外功能

特点: 1.装饰器的内部函数的格式必须要和表内装饰的原函数保持一致
2. 有语法糖写法 在被装饰的函数家上 @装饰器名
“”"

实操题

# (1)定义一个闭包,用于求解方程的y与x值的变化,例如 y = ax + b# 创建外部函数 接收ab系数
def line_y(a, b):# 创建内部函数接收xdef lin_x(x):return a*x + b#返回内部函数对象return lin_x# 调用外部函数 得到内部函数对象
line_xy = line_y(1,4)
# 调用内部函数
line_xy(2)#

(2)创建一个闭包,实现统计函数执行的次数功能。有如下调用闭包函数的代码:

# f = func_count()
# f()
# f()
# f()
#
# 执行结果如下:
#
# > hello world
# > 执行了1次
# > hello world
# > 执行了2次
# > hello world
# > 执行了3次
#
# 请完善 func_count 函数的实现。def func_count():count = 0def pr_inner():print('hello world')nonlocal countcount += 1print(f'执行了{count} 次')return pr_innerf = func_count()
f()
f()
f()
# (3)请使用装饰器方式来统计输出100000句"程序员YYDS"的执行时间。def time_fn(func):def time_inner():t1 = time.time()print(t1)func(100000)t2 = time.time()print(t2)print(f'执行所用时间为{t2 - t1}')return time_inner@time_fn
def print_fn(count):for i in range(0, count):print('程序员YYDS')print_fn()

(4)定义一个函数, 返回字符串, 使用装饰器实现对这个字符串添加后缀.txt。

def print_in(fnc):def inner_fn():return_f = fnc()return1 = return_f + '.txt'return return1return inner_fn@print_in
def print_str():return '凡人修仙传'print(print_str())

坚持分享 共同进步 如有错误 欢迎指出

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

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

相关文章

Figma入门-自动布局

Figma入门-自动布局 前言 在之前的工作中,大家的原型图都是使用 Axure 制作的,印象中 Figma 一直是个专业设计软件。 最近,很多产品朋友告诉我,很多原型图都开始用Figma制作了,并且很多组件都是内置的,对…

威联通-001 手机相册备份

文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段:1.Qfile Pro和2.Qsync Pro,实践使用中存在一些区别,针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…

大R玩家流失预测在休闲社交游戏中的应用

摘要 预测玩家何时会离开游戏为延长玩家生命周期和增加收入贡献创造了独特的机会。玩家可以被激励留下来,战略性地与公司组合中的其他游戏交叉链接,或者作为最后的手段,通过游戏内广告传递给其他公司。本文重点预测休闲社交游戏中高价值玩家…

基于Java Springboot宠物咖微信小程序

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信开发者工具 数…

ultralytics-YOLOv11的目标检测解析

1. Python的调用 from ultralytics import YOLO import os def detect_predict():model YOLO(../weights/yolo11n.pt)print(model)results model(../ultralytics/assets/bus.jpg)if not os.path.exists(results[0].save_dir):os.makedirs(results[0].save_dir)for result in…

蓝桥杯准备训练(lesson1,c++方向)

前言 报名参加了蓝桥杯(c)方向的宝子们,今天我将与大家一起努力参赛,后序会与大家分享我的学习情况,我将从最基础的内容开始学习,带大家打好基础,在每节课后都会有练习题,刚开始的练…

vscode 如何支持点击跳转函数,以C++为例,Python等其它编程语言同理,Visual Studio Code。

VScode(Visual Studio Code)按住Ctrl鼠标左键,没法跳转到对应的函数怎么办。 如下图所示 1、点击有四个小方块的图标 2、输入C(如果你的编程语言是C,其它的就输其它的) 3、找到C Extension(其它编程语言&#xff0…

【包教包会】CocosCreator3.x——重写Sprite,圆角、3D翻转、纹理循环、可合批调色板、不影响子节点的位移旋转缩放透明度

一、效果演示 重写Sprite组件,做了以下优化: 1、新增自变换,在不影响子节点的前提下位移、旋转、缩放、改变透明度 新增可合批调色板,支持色相、明暗调节 新增圆角矩形、3D透视旋转、纹理循环 所有功能均支持合批、原生平台&…

Java八股文(11-29start)

p1 缓存预热也要预热到布隆过滤器.过滤不存在的数据 布隆过滤器需要存储 添加数据的时候进行预热.布隆过滤器里面是位图结构,通过多个hash函数获得下标.改为1. 查询 id进行查询获得对应下标是否为1.可能会出现误判. 判断id是否存在. 穿透就是查询一个不存在的id.一直查询数…

【Gitlab】gitrunner并发配置

并发介绍 涉及到并发控制的一共有4个参数: concurrent , limit ,request_concurrency,parallel 全局的配置: [rootiZ2vc6igbukkxw6rbl64ljZ config]# vi config.toml concurrent 4 #这是一个总的全局控制,它限制了所有pipline,所有runner执行器…

智能运维在配电所设备监控中的应用与洞察

在配电所的设备监控中,智能运维正发挥着越来越重要的作用。通过对配电所内各关键设备的实时监测和数据分析,智能运维系统不仅提高了运维效率,还为我们提供了更深入的设备运行洞察。 一、设备监控概况 配电所内设有多个监测点,包括…

Lumos学习王佩丰Excel第十九讲:Indirect函数

一、认识indirect单元格引用 1、了解Indirect函数的意义及语法 Indirect:引用函数,间接引用。 函数语法:INDIRECT(ref_text,[a1]) 其中,ref_text是一个表示单元格地址或名称的字符串,a1是一个可选的逻辑值参数&…

QT6学习第八天 QFrame 类

QT6学习第八天 QFrame 类族QLabel 标签部件按钮部件QLineEdit 行编辑器部件QAbstractSpinBoxQAbstractSlider 今天来学一学 QFrame 类。 QFrame 类族 QFrame 类是带有边框的部件的基类。它的子类包括常用的标签部件 QLabel、以及 QLCDNumber、QSplitter、QStackedWidget、QToo…

Nginx学习-安装以及基本的使用

一、背景 Nginx是一个很强大的高性能Web和反向代理服务,也是一种轻量级的Web服务器,可以作为独立的服务器部署网站,应用非常广泛,特别是现在前后端分离的情况下。而在开发过程中,我们常常需要在window系统下使用Nginx…

【AI系统】Ascend C 语法扩展

Ascend C 语法扩展 Ascend C 的本质构成其实是标准 C加上一组扩展的语法和 API。本文首先对 Ascend C 的基础语法扩展进行简要介绍,随后讨论 Ascend C 的两种 API——基础 API 和高阶 API。 接下来针对 Ascend C 的几种关键编程对象——数据存储、任务间通信与同步…

java将word docx pdf转换为图片(不需要额外下载压缩包,直接导入maven坐标)

(本代码实现的是将第1页转为图片,主要用于制作文件缩略图) pdf转图片容易 docx转图片麻烦,看其他博客可以直接导入maven坐标,但我知道那是需要付费且有时限的包 本着简单实用的心,我找到法子了 pdf转图片:有库直接转…

工作:三菱PLC防止程序存储器爆满方法

工作:三菱PLC防止程序存储器爆满方法 一、防止程序存储器爆满方法1、编程时,添加行注释时,记得要选“外围”,这样不会占用PLC程序存储器内存;2、选择“外围”的注释,前面会有个*星号,方便检查 二…

「Mac畅玩鸿蒙与硬件36」UI互动应用篇13 - 数字滚动抽奖器

本篇将带你实现一个简单的数字滚动抽奖器。用户点击按钮后,屏幕上的数字会以滚动动画的形式随机变动,最终显示一个抽奖数字。这个项目展示了如何结合定时器、状态管理和动画实现一个有趣的互动应用。 关键词 UI互动应用数字滚动动画效果状态管理用户交…

【C#】书籍信息的添加、修改、查询、删除

文章目录 一、简介二、程序功能2.1 Book类属性:方法: 2.2 Program 类 三、方法:四、用户界面流程:五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序,用于管理书籍信息。这个程序将允许用户添加、编辑、查看…

Linux 各个目录作用

刚毕业的时候学习Linux基础知识,发现了一份特别好的文档快乐的 Linux 命令行,翻译者是happypeter,作者当年也在慕课录制了react等前端相关的视频,通俗易懂,十分推荐 关于Linux的目录,多数博客已有详细介绍…