Python:如果条件缩小多个

时间:2013-09-25 03:15:28

标签: python if-statement

我有这些陈述:

for arg in sys.argv[1:]:
    if not "-a" in arg and not "-i" in arg and not "-r" in arg and not "-o" in arg and not "-s" in arg:
        print "Error: invalid argument \"" + arg + "\"."

必须有一种方法来压缩这些语句,最终得到更少的代码。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

试试这个:

valid = {"-a", "-i", "-r", "-o", "-s"}   # using a set, for efficiency
for arg in sys.argv[1:]:                 # loop over args
    if not any(v in arg for v in valid): # equivalent to code in question
        print 'Error: invalid argument "{}".'.format(arg) # using format string

但实际上,您应该考虑使用专门的解析器来执行命令行参数(例如argparse):这不够强大并且会给您“误报”和“误报” - 请参阅注释。 / p>

答案 1 :(得分:1)

您可以通过执行以下操作来压缩它们:

if arg not in "-a-i-r-o-s":
    print "Error: invalid argument \"{}\".".format(arg)

但我建议您使用argparse模块为您完成所有这些操作。

答案 2 :(得分:0)

您真的要测试(例如)-a 参数中的<{1}},或者-a 是否参数?后者会更常见。你可以这样做:

if arg.startswith("-") and arg[1:2] not in "airos":
    print "Error: invalid argument '%s'" % arg[:2]

如果你真的想测试-a是否在论证中,最简单的方法可能是:

if not any("-" + c in arg for c in "airos"):
    print "Error: invalid argument '%s'" % arg