lambda 为全局变量赋值?

sss*_*sss 3 python lambda assign

我正在使用 tkinter 并尝试在按下按钮时为全局变量赋值。这是代码: popup.add_command(label="Allow Moving Item", command=lambda: allowMoving=True) 我收到无效的语法。你能告诉我如何解决这个问题吗?非常感谢!

che*_*ner 5

仅供娱乐。

popup.add_command(label="Allow Moving Item",
                  command=lambda: globals().update(allowMoving=True))
Run Code Online (Sandbox Code Playgroud)

(虽然globals()没有记录与 相同的“不要修改返回值”警告locals(),但我仍然不确定这是否保证有效。)


更好的答案是用def语句来定义回调。

def set_allow_moving():
    global allow_moving    # Don't use camel case for variable names in Python
    allow_moving = True

popup.add_command(label="Allow Moving Item", command=set_allow_moving)
Run Code Online (Sandbox Code Playgroud)


Bry*_*ley 5

不要使用lambda. 一个好的经验法则是永远不要使用lambda,除非根本没有其他方法。in 回调的使用lambda应该是例外而不是规则。

def allow_moving():
    global allowMoving
    allowMoving = True

popup.add_command(label="Allow Moving Item", command=allow_moving)
Run Code Online (Sandbox Code Playgroud)