在IF语句中使用OR比较

时间:2020-03-06 14:52:02  来源:igfitidea点击:

在Python中使用IF语句时,必须执行以下操作才能使"层叠"正常工作。

if job == "mechanic" or job == "tech":
        print "awesome"
elif job == "tool" or job == "rock":
        print "dolt"

检查"等于"时,是否有办法使Python接受多个值?例如,

if job == "mechanic" or "tech":
    print "awesome"
elif job == "tool" or "rock":
    print "dolt"

解决方案

if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

括号中的值是一个元组。 in操作符将检查左侧项目是否出现在右手柄元组的某处。

请注意,当Python使用in运算符搜索元组或者列表时,它会进行线性搜索。如果右侧有大量物品,则可能是性能瓶颈。更大范围的方法是使用frozenset

AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ])
def func():
    if job in AwesomeJobs:
        print "awesome"

如果不需要在程序运行过程中更改很棒的作业列表,则首选使用frozenset而不是set

if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

虽然我认为我们无法直接做我们想做的事,但一种选择是:

if job in [ "mechanic", "tech" ]:
    print "awesome"
elif job in [ "tool", "rock" ]:
    print "dolt"

在其他语言中,我将使用switch / select语句来完成工作。我们也可以在python中做到这一点。

我们可以在以下位置使用:

if job  in ["mechanic", "tech"]:
    print "awesome"

当检查非常大的数字时,可能还需要保存一组要检查的项目,因为这样做会更快。例如。

AwesomeJobs = set(["mechanic", "tech", ... lots of others ])
...

def func():
    if job in AwesomeJobs:
        print "awesome"

具有常量项的元组将自身作为常量存储在已编译的函数中。它们可以用一条指令加载。另一方面,列表和集合总是在每次执行时重新构建。

元组和列表都使用线性搜索作为运算符。集使用基于散列的查找,因此对于大量选项,它将更快。