Skip to main content
 首页 » 编程设计

Python 的 lambda 迭代没有按预期工作

2025年05月04日10me-sa

在下面的代码中,我打算有两个按钮,当每个按钮被按下时,'0' 和 '1' 将分别打印到标准输出。但是,当程序运行时,它们都打印“1”,这是我在 for 迭代中的最后一个值。为什么?

import Tkinter as tk 
import sys 
 
root = tk.Tk() 
 
for i in range(0,2): 
    cmd = lambda: sys.stdout.write(str(i)) 
    tk.Button(text="print '%d'" % i,command=cmd).pack() 
 
root.mainloop() 

请您参考如下方法:

i 在您创建它时(如您所愿)未在 lambda 中捕获。相反,这两个函数都引用外部 for 循环中的 i,它在函数创建之后和运行之前发生变化。要捕获它,您可以使用默认值:

for i in range(0,2): 
    cmd = lambda i=i: sys.stdout.write(str(i)) 
    tk.Button(text="print '%d'" % i,command=cmd).pack()