Python - 如何'set' 争论?
Python - How to 'set' an argument?
我正在努力解决这个问题,有人可以帮助我吗?
我的意思是 'set' 一个参数:
from tkinter import *
window = Tk()
I=1
def add():
global I
menu1.add_command(label=I, command=lambda:Text(I))
I=I+1
def Text(I):
print(I)
menubar = Menu(window)
menu1 = Menu(menubar, tearoff=0)
menu1.add_command(label="Add", command=add)
menu1.add_separator()
menu1.add_command(label="Quit", command=window.quit)
menubar.add_cascade(label="Files", menu=menu1)
window.config(menu=menubar)
window.mainloop()
我想当我们点击添加并在“1”之后打印“1”,当我们添加“2”并点击它时,它打印“2”,但它总是打印 I 的值,如何通过
设置参数
menu1.add_command(label=I, command=lambda:Text(1))
例如?
我不知道我是否清楚,但我不知道如何解释它!
我觉得你的问题是lambda:Text(I)
。在本例中,您创建了一个闭包,但该闭包知道 I 是一个全局对象并在稍后对其进行评估。
您可能想立即计算 Text(I)
并将其用作您的结果:
texti = Text(I) # Immediate evaluation
menu1.add_command(label=I, command=lambda:texti) # Return prior value of "I"
将您的 Text
函数更改为 closure:
def Text(I):
def inner():
print(I)
return inner
然后将您的 add
函数更改为:
def add():
global I
text = Text(I)
menu1.add_command(label=I, command=text)
I=I+1
这会将 I
保存在 text
变量中。 text
变量实际上是一个函数,inner
,调用时将打印 I
。
或者如果您想在其他地方使用 Text
函数,您可以使闭包内联:
import functools
...
menu1.add_command(label=I, command=functools.partial(Text, i))
我正在努力解决这个问题,有人可以帮助我吗? 我的意思是 'set' 一个参数:
from tkinter import *
window = Tk()
I=1
def add():
global I
menu1.add_command(label=I, command=lambda:Text(I))
I=I+1
def Text(I):
print(I)
menubar = Menu(window)
menu1 = Menu(menubar, tearoff=0)
menu1.add_command(label="Add", command=add)
menu1.add_separator()
menu1.add_command(label="Quit", command=window.quit)
menubar.add_cascade(label="Files", menu=menu1)
window.config(menu=menubar)
window.mainloop()
我想当我们点击添加并在“1”之后打印“1”,当我们添加“2”并点击它时,它打印“2”,但它总是打印 I 的值,如何通过
设置参数menu1.add_command(label=I, command=lambda:Text(1))
例如? 我不知道我是否清楚,但我不知道如何解释它!
我觉得你的问题是lambda:Text(I)
。在本例中,您创建了一个闭包,但该闭包知道 I 是一个全局对象并在稍后对其进行评估。
您可能想立即计算 Text(I)
并将其用作您的结果:
texti = Text(I) # Immediate evaluation
menu1.add_command(label=I, command=lambda:texti) # Return prior value of "I"
将您的 Text
函数更改为 closure:
def Text(I):
def inner():
print(I)
return inner
然后将您的 add
函数更改为:
def add():
global I
text = Text(I)
menu1.add_command(label=I, command=text)
I=I+1
这会将 I
保存在 text
变量中。 text
变量实际上是一个函数,inner
,调用时将打印 I
。
或者如果您想在其他地方使用 Text
函数,您可以使闭包内联:
import functools
...
menu1.add_command(label=I, command=functools.partial(Text, i))