民间, 你会如何用字典重写'checkme'函数中的if / elif?
def dosomething(queue):
...
def checkme(queue):
""" Consume Message """
if queue == 'foo':
username = 'foo'
password = 'vlTTdhML'
elif queue == 'bar':
username = 'bar'
password = 'xneoYb2c'
elif queue == 'baz':
username = 'baz'
password = 'wnkyVsBI'
...
dosomething(queue)
def main():
checkme('foo')
checkme('bar')
checkme('baz')
答案 0 :(得分:5)
你可以这样做:
CHECK_ME = {'foo': 'vlTTdhML', 'bar': 'xneoYb2c', 'baz': 'wnkyVsBI'}
def checkme(queue):
username, password = queue, CHECK_ME.get(queue)
#May be some more check here, like
if not password:
print 'password is none'
#Or do something more relevant here
#rest of the code.
答案 1 :(得分:3)
看起来你依赖于副作用,尤其是dosomething(queue)
部分,所以我认为在我的解决方案中处理完全正常,但我更愿意这样做这不依赖于副作用。
def checkme(queue):
class to_do_dict(dict):
def __missing__(self, itm):
dosomething(itm)
to_do = to_do_dict({
"foo":("foo", "v1TTdhML"),
"bar":("bar", "xneoYb2c")})
username, password = to_do[queue]
答案 2 :(得分:2)
试试这个:
passwords = {'foo':'vlTTdhML', 'bar':'xneoYb2c', 'baz':'wnkyVsBI'}
username, password = queue, passwords[queue]
以上假设每个用户都在字典中有一个密码。如果情况并非如此,那么最好安全地使用它:
username, password = queue, passwords.get(queue, None)
无论哪种方式,您都可以在最后调用dosomething(queue)
。正如问题中目前所述,始终会调用dosomething
。
答案 3 :(得分:1)
你可以这样做:
{'foo':{'username':'foo','password':'vlTTdhML'}}
只需按照您的意愿添加词典。
答案 4 :(得分:1)
嵌套词典可以解决问题。
设置用户名和密码:
queue = {}
queue["foo"] = {"username": "foo", "password": "vlTTdhML" }
queue["bar"] = {"username": "bar", "password": "xneoYb2c" }
并检查用户名/密码是否存在:
if queue.get("foo"):
username = queue["foo"]["username"]
password = queue["foo"]["password"]
else:
# username does not exist, so do something
print "username does not exist"