【发布时间】:2018-02-13 10:50:58
【问题描述】:
我最近实现了一个函数工厂,它没有像我预期的那样作用域变量。
我找到了一个解决方案,但我不知道它为什么有效。
因此,虽然我并不严格需要解决这个问题,但我发布了这个问题,希望了解有关变量范围的一些知识。
有问题的代码
# Create function list
func_list = []
for i in [1, 2]:
def _func():
print("%i" % i)
func_list.append(_func)
# Execute
for f in func_list:
f()
给出相同的输出;总是最后一个循环元素:
2
2
解决方案
# Create function list
def make_func(i):
def _func():
print("%i" % i)
return _func
func_list = []
for i in [1, 2]:
func_list.append(make_func(i))
# Execute
for f in func_list:
f()
给出了我一直以来的期望:
1
2
为什么?所以我的问题是:
- 为什么第一种方法不起作用?
- 工作实现与第一个实现在功能上有何不同?
【问题讨论】:
-
我猜返回函数返回它的值而不是引用。因此,第二个代码有效。虽然我不完全确定。
标签: python function variables scope