相思资源网 Design By www.200059.com
搞不清楚在闭包(closures)中Python是怎样绑定变量的
看这个例子:
> def create_multipliers(): ... return [lambda x : i * x for i in range(5)] > for multiplier in create_multipliers(): ... print multiplier(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
def closure_test1():
"""
每个closure的输出都是同一个i值
:return:
"""
closures = []
for i in range(4):
def closure():
print("id of i: {}, value: {} ".format(id(i), i))
closures.append(closure)
# Python's closures are late binding.
# This means that the values of variables used in closures are looked up at the time the inner function is called.
for c in closures:
c()
def closure_test2():
def make_closure(i):
def closure():
print("id of i: {}, value: {} ".format(id(i), i))
return closure
closures = []
for i in range(4):
closures.append(make_closure(i))
for c in closures:
c()
if __name__ == '__main__':
closure_test1()
closure_test2()
输出:
id of i: 10437280, value: 3 id of i: 10437280, value: 3 id of i: 10437280, value: 3 id of i: 10437280, value: 3 id of i: 10437184, value: 0 id of i: 10437216, value: 1 id of i: 10437248, value: 2 id of i: 10437280, value: 3
标签:
Python,闭包,绑定变量
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无Python新手如何进行闭包时绑定变量操作的评论...