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