【问题标题】:lambda to assign a value to global variable?lambda 为全局变量赋值?
【发布时间】:2017-02-13 19:03:16
【问题描述】:

我正在使用 tkinter 并尝试在按下按钮时为全局变量赋值。代码如下:

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

我得到了无效的语法。你能告诉我如何解决这个问题吗?

【问题讨论】:

  • 使用函数。不要使用全局变量。
  • 避免使用全局变量。如果您需要答案,请参阅此stackoverflow.com/a/21054384/1627968
  • command=lambda: allowMoving=True --> SyntaxError: can't assign to lambdalambdas 只能包含表达式,不能包含语句。)将其替换为正常定义的函数的名称。
  • 匿名函数由 lambda 表达式定义,它不能包含赋值(或任何其他类型的)语句
  • 回调不需要使用lambda语法。

标签: python lambda assign


【解决方案1】:

仅供娱乐。

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)

【讨论】:

  • 谢谢,globals().update(allowMoving=True) 方法有效。另一个问题 - 如果它是局部变量,我可以在没有全局变量的情况下更改它吗?附言我不需要 lambda
【解决方案2】:

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

def allow_moving():
    global allowMoving
    allowMoving = True

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多