Python 使用列表理解生成的函数列表
下面的Python程序打印13而不是7Python 使用列表理解生成的函数列表,python,list-comprehension,Python,List Comprehension,下面的Python程序打印13而不是7 increment_by_i = [lambda x: x+i for i in range(10)] print(increment_by_i[3](4)) 我不理解下面给出的解释: 这是因为在循环中创建的函数具有相同的作用域。它们使用相同的变量名,因此,它们都引用相同的变量i,即循环末尾的9 列表理解如何在列表中创建相应的函数?特别是,它与以下生成增量的代码有何不同 我不理解这样一句话:“它们使用相同的变量名,因此,它们都引用相同的变量I,即循环末
increment_by_i = [lambda x: x+i for i in range(10)]
print(increment_by_i[3](4))
我不理解下面给出的解释:
这是因为在循环中创建的函数具有相同的作用域。它们使用相同的变量名,因此,它们都引用相同的变量i,即循环末尾的9
I
,即循环末尾的9。”
如果我写测试[3]
是3而不是9 与初始列表理解等价的代码具有相同的行为/输出
如果您进行测试,您将看到打印(增量由修改[3](4))
具有相同的输出,13
您的函数不是保留i
的值,而是对i
的引用,以下代码可能会有所帮助:
def get_functions():
increment = 0
variables = {'i': increment}
my_functions = []
def create_function():
def f(x):
return x + variables['i']
return f
while increment < 10:
my_functions.append(create_function())
variables['i'] = increment
increment += 1
return my_functions
increment_by_i = get_functions()
print(increment_by_i_modify[3](4))
我认为您的代码中有输入错误^^更改
increment\u by\u I=[lambda x:x+1 for I in range(10)]
到increment\u by\u I=[lambda x:x+I for I in range(10)]
列表理解有自己的范围,函数在该范围内,函数结束时x是9
test=[i for i in range(10)]
def get_functions():
increment = 0
variables = {'i': increment}
my_functions = []
def create_function():
def f(x):
return x + variables['i']
return f
while increment < 10:
my_functions.append(create_function())
variables['i'] = increment
increment += 1
return my_functions
increment_by_i = get_functions()
print(increment_by_i_modify[3](4))
13