【问题标题】:python is not allowing to access back variable value set in exec [duplicate]python不允许访问exec中设置的变量值[重复]
【发布时间】:2019-01-31 09:16:24
【问题描述】:
>>> def fn(sc):
...     exec(sc)

这个函数运行得很好。

【问题讨论】:

  • 答案还是一样:要么添加global语句,明确引用globals()['A4'] = A4 + 1,要么告诉exec()要更新哪个本地命名空间。

标签: python-3.x


【解决方案1】:

我认为在 fn 内执行 "A4 = A4+1" 而不指出 A4 是全局变量不会影响全局变量,因为每个函数都有自己的局部变量字典。

如果您需要 fn 成为包含 exec 调用的单独函数,您可以使用 global 关键字指定您的变量是全局变量。

>>> def fn(sc):
...   exec(sc)
...
>>> value = 1
>>> fn('value += 1')
>>> value
1
>>> fn('global value; value += 1')
>>> value
2

或者,exec 将接受明确的 globalslocals 字典传递给它。这些函数的帮助信息指出,您无法通过更新locals() 可靠地更改变量的值,但您可以使用globals()。只要您要更新全局变量,就不需要传递locals()

>>> def fn(sc):
...   exec(sc, globals())
...
>>> value = 1
>>> fn('value += 1')
>>> value
2

【讨论】:

  • 大概是 OP 将其简化为仅调用 exec()。显然fn 不仅仅是一个别名,因为命名空间目标是不同的。
  • @khelwood 有什么影响,如果我通过 fn("...", globals(), globals()) 似乎有效
  • @TooGeeky 如果你不在函数内部,那么就没有局部变量,所以locals()globals() 返回相同的东西。只要您只想更改全局变量,将globals() 作为两个字典都应该可以工作。
  • @khelwood Perfect :) 谢谢......最后,有一些人真正帮助stackoverflow......而不是仅仅按下向下(-1)按钮并将其标记为重复。感谢您的努力。
  • 不客气。尝试一下很有趣。
猜你喜欢
  • 2019-11-18
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2020-01-11
  • 2015-05-06
  • 1970-01-01
相关资源
最近更新 更多