python中label怎么绑定变量_Python新手如何进行闭包时绑定变量操作

本文通过示例深入解析Python闭包中的变量绑定问题,揭示了Python闭包的late-binding特性,导致在循环中创建的闭包都引用了相同的变量值。通过对比两种不同的闭包创建方式,展示了如何正确地在闭包中绑定变量。
摘要由CSDN通过智能技术生成

搞不清楚在闭包(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新手如何进行闭包时绑定变量操作的文章就介绍到这了,更多相关Python闭包时绑定变量实例内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: Python新手如何进行闭包时绑定变量操作

本文地址: http://www.cppcns.com/jiaoben/python/314683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值