测开之路十一:作用域、闭包和修饰器

本文深入探讨Python中的作用域规则,包括局部、闭包、全局和内建作用域,解析闭包的定义和使用,以及装饰器作为闭包的应用实例。通过具体示例,帮助读者理解闭包和装饰器的执行流程。

 

作用域

 

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G(Global) 全局作用域
B (Built-in) 内建作用域
locals()和globals()
local -> enclosing-> global -> build-in

 

 

闭包

1.闭包函数必须有内嵌函数
2.内嵌函数需要引用嵌套函数的变量
3.闭包函数必须返回内嵌函数

第一层def的参数为函数名,第二层def的参数为第一层传的函数需要的参数

 

 闭包用法:

1.直接调用

 

2.修饰器调用, 修饰器的本质是闭包

 

 

装饰器的作用就是为已经存在的对象添加额外的功能。
常用场景:插入日志、性能测试、事务处理、缓存、权限校验等

 

当一个函数有两个修饰器的时候,执行顺序为先执行靠近主函数的,再执行上面的装饰器,如:

很明显,从打印结果来看,是先执行了run2,再执行的run1

 

转载于:https://www.cnblogs.com/zhongyehai/p/10747706.html

AI-PPT 一键生成 PPT:用户输入主题关键词,AI-PPT 可快速生成完整 PPT,涵盖标题、正文、段落结构等,还支持对话式生成,用户可在 AI 交互窗口边查看边修改。 文档导入转 PPT:支持导入 Word、Excel、PDF 等多种格式文档,自动解析文档结构,将其转换为结构清晰、排版规范的 PPT,有保持原文智能优化两种模式。 AI-PPT 对话 实时问答:用户上传 PPT 或 PPTX 文件后,可针对演示内容进行提问,AI 实时提供解答,帮助用户快速理解内容。 多角度内容分析:对 PPT 内容进行多角度分析,提供全面视野,帮助用户更好地把握内容结构重点。 多语言对话支持:支持多语言对话,打破语言障碍,方便不同语言背景的用户使用。 AI - 绘图 文生图:用户输入文字描述,即可生成符合语义的不同风格图像,如油画、水彩、中国画等,支持中英文双语输入。 图生图:用户上传图片并输入描述,AI - 绘图能够根据参考图描述生成新的风格化图像,适用于需要特定风格或元素的创作需求。 图像编辑:提供如 AI 超清、AI 扩图、AI 无痕消除等功能,用户可以上传图片进行细节修改优化,提升图片质量。 AI - 文稿 文案生成:能够根据用户需求生成多种类型的文章,如市场营销文案、技术文档、内部沟通内容等,提升文案质量创作效率。 文章润色:对已有文章进行改善优化,包括语言表达、逻辑连贯性、内容流畅度等方面,使文章更符合用户期望风格。 文章续写:AI 技术理解文本语境,为用户提供新的想法、补充资料或更深层次的见解,帮助用户丰富文档内容。 AI - 医生 智能健康咨询:包括症状自查,用户输入不适症状,AI 结合病史等信息提供疾病可能性分析与初步建议;用药指导,支持查询药品适应症、禁忌症等,并预警潜在冲突;中医辨证,提供体质辨识与调理建议。 医学报告解读:用户上传体检报告
### 闭包与装饰器的概念及其应用 #### 定义与特性 闭包是指一个函数对象能够记住并访问它的词法作用域,即使这个函数在其词法作用域之外被执行。这意味着内部函数可以携带外部函数的作用域数据[^1]。 装饰器本质上是一个接受其他函数作为参数的函数,并返回一个新的替换版本的函数或者增强后的原函数。通过这种方式可以在不修改目标函数源码的情况下增加其功能[^2]。 #### 实现方式 对于闭包而言,在Python中可以通过嵌套函数来创建: ```python def outer_function(x): def inner_function(y): return x + y return inner_function ``` 上述例子展示了如何构建简单的闭包结构,`inner_function` 记住了 `outer_function` 中变量 `x` 的值。 而装饰器则通常用于包裹另一个函数以扩展行为而不改变原始逻辑: ```python from functools import wraps def my_decorator(func): @wraps(func) def wrapper(*args, **kwargs): print('Something is happening before the function is called.') result = func(*args, **kwargs) print('Something is happening after the function is called.') return result return wrapper ``` 这里展示了一个基本的装饰器模式,它会在调用被修饰的目标函数前后执行额外的操作。 当涉及到多层装饰时,则按照从下往上的顺序依次处理各个装饰器;即最接近实际方法的那个先运行,之后才是上一层的装饰器[^3]: ```python @decorator1 @decorator2 def say_hello(): print("Hello!") say_hello() # 输出: # 装饰器 1 # 装饰器 2 # Hello! ``` 此代码片段说明了多个装饰器叠加使用的机制。 #### 应用场景 闭包常用来实现回调函数、事件处理器或者其他需要保存状态信息的情况。例如在GUI编程里,按钮点击事件可能依赖于某些局部环境下的配置项,这时就可以利用闭包捕获这些上下文信息。 另一方面,装饰器广泛应用于日志记录、性能试、事务管理等领域。比如想要给某个API接口加上认证验证的功能,可以直接编写相应的装饰器而不是直接改动原有业务逻辑代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值