2011-01-29 33 views
1

可以简化这个吗?也许把两者结合起来?告诉我DRY的方法: - \在Python中,我可以在一个条件中处理两个变量吗?

o = old_last_result 
if o == 7: 
    old_last_result_msg = result_7 
elif o == 12: 
    old_last_result_msg = result_12 
elif o == 23: 
    old_last_result_msg = result_23 
elif o == 24: 
    old_last_result_msg = result_24 
elif o == 103: 
    old_last_result_msg = result_103 
elif o == 1000: 
    old_last_result_msg = result_1000 
else: 
    old_last_result_msg = "Error code: #%s" % old_last_result 

n = new_last_result 
if n == 7: 
    new_last_result_msg = result_7 
elif n == 12: 
    new_last_result_msg = result_12 
elif n == 23: 
    new_last_result_msg = result_23 
elif n == 24: 
    new_last_result_msg = result_24 
elif n == 103: 
    new_last_result_msg = result_103 
elif n == 1000: 
    new_last_result_msg = result_1000 
else: 
    new_last_result_msg = "Error code: #%s" % new_last_result 

回答

9
result_msgs = { 
    7: result_7, 
    12: result_12, 
    ... 
} 

old_last_result_msg = result_msgs.get(old_last_result, 
    "Error code: #%s" % old_last_result) 
new_last_result_msg = result_msgs.get(new_last_result, 
    "Error code: #%s" % new_last_result) 
+0

甜。刚刚抬起头.get()http://docs.python.org/library/stdtypes.html#dict.get – Flowpoke 2011-01-29 00:42:37

1

您似乎将数字代码映射到字符串消息。使用字典!注意:

_result_msg = { 
    7: result_7, 
    12: result_12, 
    # ... etc 
} 

o = old_last_result 
try: 
    old_last_result_msg = _result_msg[o] 
except KeyError: 
    old_last_result_msg = 'Error code: #%s' % o 
2

您可以使用字典:

results = {7: result_7, ..., 1000: result_100} 
old_last_result_msg = results.get(o, "Error code: #%s" % old_last_result) 
0

EVAL可能是有趣的,你...

i = 7 
result_7 = 'foo' 
print eval('result_%s' % i) 
> foo 
+1

我不会投票,但...真的,**没有**。让糟糕的PHP实践留在PHP ^^中 – 2011-01-29 00:39:29

0

你可以用当地人()或全局()内建构造如下变量:

var res = "result_%d"%o 
if res in locals(): old_last_result_msg = locals()[res] 
else: 
    if res in globals(): old_last_result_msg = globals()[res] 
    else: raise Exception("unexpected result:%s"%res) 
相关问题