闭包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | # 闭包的优点: # 1, 可以保护变量不被其他人侵害 # 2, 保持一个变量常驻内存 # def wrapper(): # a = "哈哈" # 不安全的一种写法 # name = "周杰伦" # def inner(): # print(name) # 在内层函数中使用了外层函数的局部变量 # print(a) # def ok(): # nonlocal a # a = 108 # print(a) # return inner # 返回函数名 # # ret = wrapper() # ret() # # def ok(): # global a # a = 20 # print(a ) # def wrapper(): # name = "周杰伦" # 局部变量常驻与内存 # def inner(): # print(name) # 在内层函数中使用了外层函数的局部变量 # return inner # 返回函数名 # # inner() # # ret = wrapper() # ret是一个内层函数 # ret() # ret是inner, 执行的时机是不确定的, 必须保证里面的name必须存在 # 超级简易版爬虫 # from urllib.request import urlopen # 导入一个模块 # # 干掉数字签名 # import ssl # ssl._create_default_https_context = ssl._create_unverified_context # # # def func(): # # 获取到网页中的内容, 当网速很慢的时候. 反复的去打开这个网站. 很慢 # content = urlopen("https://www.dytt8.net/").read() # # def inner(): # return content.decode("gbk") # 网页内容 # return inner # # print("开始网络请求") # ret = func() # 网络请求已经完毕 # print("网络请求完毕") # print("第一次", ret()[5]) # print("第二次", ret()[5]) # def wrapper(): name = "alex" def inner(): print ( "胡辣汤" ) print (inner.__closure__) # 查看是否是闭包. 有内容就是闭包, 没有内容就不是闭包 inner() wrapper() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战