将这个if语句群变成更清晰的东西

时间:2015-02-15 06:16:35

标签: python python-2.7

我想弄清楚如何将我的if语句群缩短为更短的内容。

这是我想要做的较小版本。

import sys

v1 = "1"
v2 = "2"


if sys.argv[1] == "any" and sys.argv[2] == "any":
        print "nofliter"

elif sys.argv[1] == v1 and sys.argv[2] == v2:
        print "filtering both"

elif sys.argv[1] == v1 and sys.argv[2] == 'any':
        print "filtering half"

它非常令人困惑。但我希望有人通过阅读它来获得我想要做的事情。到目前为止,我只设置了2个变量,但是当我完成后,我可能会设置超过8个。

基本上如果没有定义某些东西,那么一切都没问题。

示例:

if varible1 == 80 and varible2 == 100:
   print "something"

if varible1 == anything and varible2 == 230:
   print "something"

我不知道我的pesudo代码是否有意义,但这只是它的正义。

2 个答案:

答案 0 :(得分:0)

如果我理解你的目标,你可能想这样写:

possible_values = (1, 2, 3, 4) # put the acceptable values of arguments here

if (sys.argv[1] in possible_values and sys.argv[2] in possible_values):
  print("filtering both")
elif (sys.argv[1] in possible_values or sys.argv[2] in possible_values):
  print("filtering half")
else:
  print("nofilter")

如果这不是您想要做的,请解释更多。

答案 1 :(得分:0)

使用带frozenset键的字典:

params_dict = {frozenset(('any',)): 'nofilter',
              frozenset(('1', '2')): 'filter both', 
              frozenset(('any', '1')): 'filter half', 
              frozenset(('any', '2')): 'filter half',
              ....
              }

params_descr = params_dict.get(frozenset(sys.argv[1:3]))

if params_descr is not None:
    print(params_descr)