相关疑难解决方法(0)

在循环中创建函数

我正在尝试在循环内创建函数并将它们存储在字典中.问题是字典中的所有条目似乎最终都映射到最后创建的函数.代码如下:

functions = []

for i in range(3):
    def f():
        return i

    # alternatively: f = lambda: i

    functions.append(f)
Run Code Online (Sandbox Code Playgroud)

这输出:

print([f() for f in functions])
# expected output: [0, 1, 2]
# actual output:   [2, 2, 2]
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

python function

79
推荐指数
2
解决办法
3万
查看次数

Python闭包没有按预期工作

当我运行以下脚本时,两个lambda都在同一个文件--junk.txt上运行os.startfile().我希望每个lambda使用值"f"设置为lambda创建时.有没有办法让它按照我的预期运作?

import os


def main():
    files = [r'C:\_local\test.txt', r'C:\_local\junk.txt']
    funcs = []
    for f in files:
        funcs.append(lambda: os.startfile(f))
    print funcs
    funcs[0]()
    funcs[1]()


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

python lambda closures

11
推荐指数
2
解决办法
2796
查看次数

标签 统计

python ×2

closures ×1

function ×1

lambda ×1