Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用列表理解生成的函数列表_Python_List Comprehension - Fatal编程技术网

Python 使用列表理解生成的函数列表

Python 使用列表理解生成的函数列表,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,即循环末

下面的Python程序打印13而不是7

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