我的一个函数将使用外部变量,但是当我使用此函数时外部变量将会改变。这是一个例子:
func_list=[]
for i in range(0,6):
def func():
print(i)
func_list.append(func)
for j in range(0,6):
func_list[j]()
我希望输出为[1,2,3,4,5,6],但实际输出是[6,6,6,6,6,6] 我知道其中一个解决方案是使用闭包,如下所示:
func_list=[]
for i in range(0,6):
def create_func():
nonlocal i
number=i
def func():
print(number)
return func
func=create_func()
func_list.append(func)
for j in range(0,6):
func_list[j]()
这个程序可以输出[1,2,3,4,5,6]。但它看起来有点难看。它使用额外的4行,至少3行来解决这个问题......是否有一些更简单的方法/函数装饰来解决这个问题?
谢谢。答案 0 :(得分:0)
试试这个:
func_list=[]
for i in range(0,6):
def func(i = i):
print(i)
func_list.append(func)
for j in range(0,6):
func_list[j]()
它的工作原理是因为i
在函数定义中进行了评估,其值作为关键字参数的默认值而不是变量。 / p>
当然,如果你需要传递一个名为i
的关键字参数,这将会中断,在这种情况下你可能想要使用你提供的(丑陋的)解决方案。