我在json中有一系列消息,它们包含一个名为part
的字段,该字段是0到2之间的整数。我有三个消息队列,而part
的值确定了我在哪个队列中将消息发送到。
这是我当前的代码。
output0 = queue.Queue()
output1 = queue.Queue()
output2 = queue.Queue()
json = json.loads('{"test": "message", "part": "2"}')
part = int(json["part"])
if part == 0:
output0.put(json)
elif part == 1:
output1.put(json)
elif part == 2:
output2.put(json)
我想用类似的东西来简化它。
chooseQueue = "output" + str(json["part"])
chooseQueue.put(json)
此错误AttributeError: 'str' object has no attribute 'put'
在R中,可以通过使用as.formula()
或get()
将字符串用作变量名。
答案 0 :(得分:8)
您的问题的答案是locals()
。
问题的答案是dict
queue_dict = {'1': queue.Queue(), '2': queue.Queue(), '3': queue.Queue()}
queue = queue_dict[json["part"]]
答案 1 :(得分:4)
您可以,但是最好将队列放在字典中:
queues = {"output0": queue.Queue(),
"output1": queue.Queue(),
"output2": queue.Queue(),
}
chooseQueue = "output" + str(json["part"])
queues[chooseQueue].put(json)
答案 2 :(得分:1)
您可以使用locals()
函数通过名称访问本地作用域中的变量:
chooseQueue = locals()["output" + str(json["part"])]
答案 3 :(得分:1)
大多数答案告诉您应该使用内置的locals()
函数,当它们正确时,我想通知您globals()
函数,该函数返回一个字典全局变量,您可以使用global
关键字创建。
例如,在Python 3终端中,globals()
函数返回:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
祝你好运。