【问题标题】:Alternatives to exec/eval?exec/eval 的替代方案?
【发布时间】:2013-05-22 00:23:22
【问题描述】:

我一直在尝试找到一种方法来可靠地设置和获取具有字符串名称的变量值。我能在远程附近找到的任何东西似乎并不总是有效。变量可以在任何模块中,并且这些模块是被导入的。

获取和设置变量值的安全/正确方法是什么?

ps - 我对 python 还是很陌生

【问题讨论】:

  • 那些模块是你自己写的吗?你肯定在这里做错了什么。以这种方式访问​​变量是非常不合常理的。请展示一些您正在尝试做的事情的示例。
  • 我可以给出的唯一代码示例是使用 eval 和 exec,所以我认为这不再是试图了解这些变量的方式和位置,而是更直接地访问它们,而不依赖于编译自字符串代码。提供一点背景知识,它基本上是一个媒体后端系统,这种特殊需求是针对那些有模糊线索但懒得自己编码的人。它是一种修改和创建统一终端“电视”体验的桥梁,但它的子系统可以从基本上非程序员的数据文件工作到半脚本正在发生的事情。

标签: python python-2.7


【解决方案1】:

虽然它会起作用,但通常不建议使用对程序本身有意义的变量名。

相反,最好使用字典:

mydict = {'spam': "Hello, world!"}
mydict['eggs'] = "Good-bye!"
variable_name = 'spam'
print mydict[variable_name]  # ==> Hello, world!
mydict[variable_name] = "some new value"
print mydict['spam']  # ==> "some new value"
print mydict['eggs']  # ==> "Good-bye!"

(取自另一个答案并修改的代码)

【讨论】:

  • 我自己一直倾向于这个解决方案,只是想知道我没有遇到什么方法。 python 有很多信息,找到所有信息在哪里,特别是在从旧 2、新 2 到现在到 3 的过渡中,有很多信息可以用来整理当前和可用的信息。
【解决方案2】:
spam = "Hello, world!"
variable_name = 'spam'
print globals()[variable_name]  # ==> Hello, world!
globals()[variable_name] = "some new value"
print spam  # ==> some new value

【讨论】:

  • 我很想对此投反对票,即使它在技术上是正确的。为什么要教一个自称是 Python 新手的最糟糕的实现目标的方法?
  • @TimPietzcker:你是对的,当然。不过,我真的不确定我应该怎么做,所以我就这么做了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多