当前位置: 首页 > news >正文

天津网架公司怎样优化网络

天津网架公司,怎样优化网络,快递网站模版,赣州网络问政问题代码 def create_functions():functions []for i in range(3):# 创建一个函数,期望捕获当前循环的i值functions.append(lambda: print(f"My value is: {i}"))return functions# 创建三个函数 f0, f1, f2 create_functions()# 调用这些函数 f0() # 期望输出 &…

问题代码

def create_functions():functions = []for i in range(3):# 创建一个函数,期望捕获当前循环的i值functions.append(lambda: print(f"My value is: {i}"))return functions# 创建三个函数
f0, f1, f2 = create_functions()# 调用这些函数
f0()  # 期望输出 "My value is: 0"
f1()  # 期望输出 "My value is: 1"
f2()  # 期望输出 "My value is: 2"

但是实际输出为

My value is: 2
My value is: 2
My value is: 2

类似的,也可以不是用 lambda 表达式,而是使用函数实现闭包

# 依旧有问题
def create_functions():functions = []for i in range(3):def func():print(f"My value is: {i}")functions.append(func)return functions

问题原因解释

产生这样问题的原因是:python 闭包捕获了同一个外部变量 i,并且是通过变量名 i 而非 i 的地址作为索引(这一点很关键,虽然实际要比这个复杂,但是可以理解为就是通过名称确定某个变量的!

  • 如果不是通过变量 i 的字符串名字进行索引,也不会出现这个问题,实际上在 for i in range(3) 过程中给你,i 的地址是一直变的
  • 所以在最后 f0f1f2 都用过名字 i 来找内存,找到了最后的那个 2 对应的内存地址!

两种解决方案

方案 1:把值通过变量传进去,此时闭包引用的是 func 的局部变量 x,而每一个函数实际都是不同的

def create_functions():functions = []for i in range(3):def func(x):return lambda: print(f"My value is: {x}")functions.append(func(i))return functions# 创建三个函数
f0, f1, f2 = create_functions()# 调用这些函数
f0()  # 期望输出 "My value is: 0"
f1()  # 期望输出 "My value is: 1"
f2()  # 期望输出 "My value is: 2"

方案 2:使用函数入参默认值,因为 python 在定义函数默认值时,需要计算出来(这也是另外一个经常出 bug 的问题)

def create_functions():functions = []for i in range(3):def func(x=i):print(f"My value is: {x}")functions.append(func)return functions# 创建三个函数
f0, f1, f2 = create_functions()# 调用这些函数
f0()  # 输出 "My value is: 0"
f1()  # 输出 "My value is: 1"
f2()  # 输出 "My value is: 2"

总结

在产生闭包(尤其是 lambda 表达式这种比较隐蔽时)时,一定要注意闭包中对外部变量的引用是否在发生改变,要仔细思考这些改变是否符合预期

不过,只要知道原理,相信可以很好的处理这些情况

http://www.dtcms.com/a/617073.html

相关文章:

  • 做外贸有哪些免费的网站wordpress 加微信号
  • 做杂志的模板下载网站网站进行规划与设计
  • 为外国企业做中文网站建设营口市住房建设保障办官方网站
  • 网站开发费税率重庆网站建设项目
  • 厦门网站设计多少钱做视频赚钱的网站有哪些
  • 西安seo站内优化阿里云服务器12元一年
  • 通信工程毕设可以做网站吗黑马程序员c++笔记
  • 中国建设部网站宁波今晨发现1例阳性
  • 东莞站福公司工资注册网站给谁交钱
  • 网站开发所需要的语言公众平台安全助手
  • wordpress网站主机网页设计网站
  • 网站建设在哪里找奉化建设局网站
  • 有哪些开发网站公司上海城乡建设网站证件查询
  • 建设项目环保验收平台网站珠海免费模板建站
  • 成都软件网站开发网站案例分析
  • 学做网站的视频教学网站建设招标公示
  • 东莞外贸网站建设企业网站改版方案
  • 广东省建设项目安全标准自评网站cad做兼职区哪个网站
  • wordpress免费网站如何提高网站打开速度
  • 有什么做兼职的好的网站展厅设计ppt
  • 网站浏览图片怎么做的自己做网站别人怎么看见
  • 网站建设公司广wordpress 主题阁
  • 同一个网站绑定多个域名企业建站官网
  • 如何进行网站建设分析标志设计公司网站
  • 织梦手机端网站怎么做免费软件推荐
  • 优质网站建设的设计要点wordpress後台建站
  • 电梯配件做外贸在哪个网站wordpress主题 医疗
  • 做网站iiwok网站建设及空间
  • 部队网站源码教育类网站框架
  • 南京网站推广拓客软件哪个好用