-5

我有一个小问题:如果我运行这个:

print(list(globals()))

这是输出:

['__package__', '__loader__', '__doc__', , '__file__', 'b', '__name__', '__builtins__', 'a']

我想尝试一种包含所有这些元素的方法,尤其是ab.

但这就像:

'a'.run()

所以这根本不起作用。

我需要类似的东西:

a.run()
4

3 回答 3

2

使用字符串作为返回的字典的键globals。结果值将是实际对象。例子:

a = "hello world!"
print globals()["a"].split()

在这里,该方法split在变量上调用a。结果:

['hello', 'world!']
于 2013-09-18T17:39:18.567 回答
1

如果您已经知道该对象被调用a,只需直接访问该变量:a.run().

如果您不知道变量名称,那么您肯定不知道它是否通过run方法引用了一个值,因此尝试以这种方式调用它是很不安全的。

无论你想做什么,几乎肯定有更好的方法。

于 2013-09-18T17:42:40.367 回答
0

在这种特殊情况下,您遇到了迭代dict' 工作的方式。当你这样做时list(some_dict),你会得到一个的列表some_dict。碰巧那globals()是一个字典,所以你得到了那个字典的键,即全局事物的“名称”。您可以通过显而易见的方式从 dict 中获取list(some_dict.values()): ,甚至可以同时获取 key 和 value some_dict.items()

所以你的例子可能是

for something in globals().items():
    something.run()

更一般地说,如果您有一些需要解析的任意名称列表,您可能不想使用这种方法。

于 2013-09-18T17:40:31.160 回答