我有一个小问题: 如果我运行这个:
print(list(globals()))
这是输出:
['__package__', '__loader__', '__doc__', , '__file__', 'b', '__name__', '__builtins__', 'a']
我想尝试一种包含所有这些元素的方法,尤其是a
和b
。
但这就像是:
'a'.run()
所以这根本不起作用。
我需要类似的东西:
a.run()
答案 0 :(得分:2)
使用字符串作为globals
返回的字典的键。结果值将是实际对象。例如:
a = "hello world!"
print globals()["a"].split()
此处,方法split
在变量a
上调用。结果:
['hello', 'world!']
答案 1 :(得分:1)
如果您已经知道该对象被称为a
,则只需直接访问该变量:a.run()
。
如果您不知道变量名称,那么您肯定不知道它是否引用了run
方法的值,因此尝试以这种方式调用它是远非安全的。
无论你想做什么,几乎肯定有更好的方法。
答案 2 :(得分:0)
在这种特殊情况下,你正在对dict
的工作进行迭代。执行list(some_dict)
后,您会获得some_dict
的键列表。碰巧globals()
是一个字典,所以你得到了那个字典的键,即全局事物的“名字”。您可以以明显的方式从字典中获取值:list(some_dict.values())
,您甚至可以同时获得密钥和值some_dict.items()
。
所以你的例子可能是
for something in globals().items():
something.run()
更一般地说,如果您需要解决一些任意名称列表,您可能不希望使用这种方法。