lambda为全局变量赋值?

时间:2017-02-13 19:03:17

标签: python lambda assign

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

2 个答案:

答案 0 :(得分:1)

不要使用lambda。一个好的经验法则是永远不要使用lambda,除非别无其他办法。在回调中使用lambda应该是例外而不是规则。

def allow_moving():
    global allowMoving
    allowMoving = True

popup.add_command(label="Allow Moving Item", command=allow_moving)

答案 1 :(得分:0)

仅限娱乐用途。

popup.add_command(label="Allow Moving Item",
                  command=lambda: globals().update(allowMoving=True))

(虽然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)