這個問題在這里已經有了答案: lambda 函式閉包捕獲了什么? (7 個回答) 5 小時前關閉。
在 Python 中,我正在嘗試使用 for 回圈生成選單,但是當我單擊任何選單項時,總是會觸發最后一個選單項,我該如何解決這個問題?我正在使用 Tkinter。
font_sizes = [
str ('8' ),
str ('9' ),
str ("10"),
str ("11"),
str ("12"),
str ("14"),
str ("16"),
str ("18"),
str ("20"),
str ("22"),
str ("24"),
str ("26"),
str ("28"),
str ("36"),
str ("48"),
str ("72"),
];
for font_size in font_sizes :
font_size_menu.add_command (
label = font_size,
command = lambda : function (font_size),
);
uj5u.com熱心網友回復:
這是 Python 的一個棘手的角落。問題是lambda捕獲 name font_size,而不是 value。因此,當這些函式中的任何一個運行時, 的值為font_size“72”。您可以通過“捕獲”該值作為默認引數來解決此問題。作為旁注,您永遠不需要呼叫str字串。我們在 Python 中不使用分號作為陳述句終止符。
font_sizes = [
'8','9','10','11','12','14','16','18',
'20','22','24','26','28','30','48','72'
]
for font_size in font_sizes :
font_size_menu.add_command (
label = font_size,
command = lambda font_size=font_size: function (font_size),
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512042.html
