网络编程
位置:首页>> 网络编程>> Python编程>> Python新手如何进行闭包时绑定变量操作

Python新手如何进行闭包时绑定变量操作

作者:爱喝马黛茶的安东尼  发布时间:2021-05-01 15:23:55 

标签:Python,闭包,绑定变量

搞不清楚在闭包(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

来源:https://www.py.cn/jishu/jichu/10531.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com