python中有与get()等效的东西吗?

时间:2019-04-25 15:54:43

标签: python python-3.x

我在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()将字符串用作变量名。

4 个答案:

答案 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)>}

祝你好运。