Python新手如何进行闭包时绑定变量操作
搞不清楚在闭包(closures)中Python是怎样绑定变量的
看这个例子:
>>>defcreate_multipliers(): ...return[lambdax:i*xforiinrange(5)] >>>formultiplierincreate_multipliers(): ...printmultiplier(2) ...
期望得到下面的输出:
0
2
4
6
8
但是实际上得到的是:
8
8
8
8
8
实例扩展:
#coding=utf-8 __author__='xiaofu' #解释参考http://docs.python-guide.org/en/latest/writing/gotchas/#late-binding-closures defclosure_test1(): """ 每个closure的输出都是同一个i值 :return: """ closures=[] foriinrange(4): defclosure(): print("idofi:{},value:{}".format(id(i),i)) closures.append(closure) #Python'sclosuresarelatebinding. #Thismeansthatthevaluesofvariablesusedinclosuresarelookedupatthetimetheinnerfunctioniscalled. forcinclosures: c() defclosure_test2(): defmake_closure(i): defclosure(): print("idofi:{},value:{}".format(id(i),i)) returnclosure closures=[] foriinrange(4): closures.append(make_closure(i)) forcinclosures: c() if__name__=='__main__': closure_test1() closure_test2()
输出:
idofi:10437280,value:3 idofi:10437280,value:3 idofi:10437280,value:3 idofi:10437280,value:3 idofi:10437184,value:0 idofi:10437216,value:1 idofi:10437248,value:2 idofi:10437280,value:3
到此这篇关于Python新手如何进行闭包时绑定变量操作的文章就介绍到这了,更多相关Python闭包时绑定变量实例内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。