详解 Python中LEGB和闭包及装饰器
发布时间 - 2026-01-11 02:37:40 点击率:次详解 Python中LEGB和闭包及装饰器

LEGB L>E>G?B
- L:local函数内部作用域
- E:enclosing函数内部与内嵌函数之间
- G:global全局作用域
- B:build-in内置作用域
python 闭包
1.Closure:内部函数中对enclosing作用域变量的引用
2.函数实质与属性
- 函数是一个对象
- 函数执行完成后内部变量回收
- 函数属性
- 函数返回值
passline = 60
def func(val):
if val >= passline:
print ('pass')
else:
print ('failed')
def in_func():
print (val)
in_func()
return in_func
f = func(89)
f()
print (f.__closure__)
一般情况
def f_100(val):
passline = 60
if val >= passline:
print ('pass')
else:
print ('failed')
def f_150(val):
passline = 90
if val >= passline:
print ('pass')
else:
print ('failed')
f_100(89)
f_150(89)
闭包
def set_passline(passline):
def cmp(val):
if val >= passline:
print ('Pass')
else:
print ('failed')
return cmp
f_100 = set_passline(60)
f_150 = set_passline(90)
f_100(89)
f_150(89)
Closure:内部函数中对enclosing作用域变量的引用,它会将enclosing作用域变量传递到内部函数的closure中
闭包的作用:
- 封装
- 代码复用
python闭包二
求和
def my_sum(*arg):
if len(arg) == 0:
return 0
for val in arg:
if not isinstance(val,int): # 有一个非int则返回0
return 0
return sum(arg)
def my_average(*arg):
if len(arg) == 0:
return 0
for val in arg:
if not isinstance(val,int): # 有一个非int则返回0
return 0
return sum(arg)/len(arg)
print (my_sum(1,2,3,4,5))
print (my_sum(1,2,3,4,5,'6'))
print (my_aveage(1,2,3,4,5))
print(my_average())
闭包的使用
def my_sum(*arg):
return sum(arg)
def my_average(*arg):
return sum(arg)/len(arg)
def dec(func):
def in_dec(*arg): # my_sum
print ('in dec arg= ',arg)
if len(arg) ==0:
return 0
for val in arg:
if not isinstance(val, int):
return 0
return func(*arg) # 闭包,存在于in_dec函数中的__closure__中,所以可以调用
return in_dec
my_sum = dec(my_sum) # 传参
print(my_sum (1,2,3,4,5))
print(my_sum (1,2,3,4,5,'6'))
# my_sum就是in_dec函数,会先执行参数类型判断,然后执行__closure__中的函数my_sum
python 装饰器
- 装饰器用来装饰函数
- 返回一个函数对象
- 被装饰函数标识符指向返回的函数对象
- 语法糖 @deco
使用装饰器的方式
def dec(func):
def in_dec(*arg): # my_sum
print ('in dec arg= ',arg)
if len(arg) ==0:
return 0
for val in arg:
if not isinstance(val, int):
return 0
return func(*arg) # 闭包,存在于in_dec函数中的__closure__中,所以可以调用
return in_dec # 如果没有返回值,则my_sum调用装饰器后为None
# my_sum = dec(my_sum) # 不手动传参
@dec # 装饰器将my_sum作为参数传入dec,并返回一个新的函数赋值给my_sum
def my_sum(*arg):
return sum(arg)
def my_average(*arg):
return sum(arg)/len(arg)
print(my_sum (1,2,3,4,5))
print(my_sum (1,2,3,4,5,'6'))
另一个例子
def deco(func):
def in_deco(x,y):
print ('in deco')
func(x,y)
print ('call deco')
return in_deco
@deco
def bar(x, y):
print ('in bar',x+y)
bar(1,2)
以上就是Python中LEGB和闭包及装饰器的介绍,如有疑问请留言或者到本站社区交流讨论,本站关于Python 的文章还有很多,还希望大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Python中LEGB和闭包及装饰器
# Python
# 闭包
# LEGB
# Python必备基础之闭包和装饰器知识总结
# python高级语法之闭包和装饰器详解
# Python闭包装饰器使用方法汇总
# 深入理解python中的闭包和装饰器
# Python 中闭包与装饰器案例详解
# 中对
# 有一个
# 返回值
# 是一个
# 如有
# 希望能
# 如果没有
# 希望大家
# 谢谢大家
# 会将
# 还有很多
# 会先
# 内嵌
# 后为
# 复用
# 疑问请
# 一个函数
# 完成后
# func
# val
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
做企业网站制作流程,企业网站制作基本流程有哪些?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
nginx修改上传文件大小限制的方法
手机网站制作与建设方案,手机网站如何建设?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
js实现获取鼠标当前的位置
如何快速生成高效建站系统源代码?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Laravel怎么清理缓存_Laravel optimize clear命令详解
Laravel怎么实现模型属性的自动加密
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何快速搭建高效简练网站?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何快速上传自定义模板至建站之星?
JavaScript中的标签模板是什么_它如何扩展字符串功能
node.js报错:Cannot find module 'ejs'的解决办法
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
专业商城网站制作公司有哪些,pi商城官网是哪个?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
javascript基于原型链的继承及call和apply函数用法分析
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel如何使用.env文件管理环境变量?(最佳实践)
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何在阿里云购买域名并搭建网站?
如何快速搭建二级域名独立网站?
如何在阿里云虚拟主机上快速搭建个人网站?
详解MySQL数据库的安装与密码配置
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
如何快速登录WAP自助建站平台?
如何用景安虚拟主机手机版绑定域名建站?
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
动图在线制作网站有哪些,滑动动图图集怎么做?
深圳网站制作的公司有哪些,dido官方网站?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
成都网站制作公司哪家好,四川省职工服务网是做什么用?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何在 Pandas 中基于一列条件计算另一列的分组均值
如何用PHP快速搭建CMS系统?

