在学习Python的艰难之路中,学生的一个问题是:
你能用一系列if-else组合替换elif吗?
在某些情况下,您可以使用,但这取决于每个if / else的写入方式。这也意味着Python将检查每个if-else组合,而不是像if-elif-else那样只检查第一个假组合。
当他说"在某些情况下,"我只是想知道何时使用这些序列替换elif更有效。
编辑:这两段代码的执行方式有什么不同吗?
print "You enter a dark room with two doors. Do you go through door #1 or door @2?"
door = raw_input("> ")
if door == "1":
print "Hello."
# More if/else here
# ...
# ...
if door == "2":
print "Hello again."
# More if/else here
# ...
# ...
else:
print "End."
print "You enter a dark room with two doors. Do you go through door #1 or door @2?"
door = raw_input("> ")
if door == "1":
print "Hello."
# More if/else here
# ...
# ...
elif door == "2":
print "Hello again."
# More if/else here
# ...
# ...
else:
print "End."
答案 0 :(得分:3)
可以用if
... if
... elif
块替换一系列else
语句的一种情况是每个if
} statement包含return
:
def check(something):
if something == 1:
return "foo"
if something == 2:
return "bar"
return "n/a"
在这种情况下,return
表示到达第二个if
时,您知道第一个条件为false,因此任何else
}或elif
是多余的。此外,在这种特殊情况下,如果您需要重新排序if
语句,它会稍微容易一些,因为您不必担心在elif
子句之前结束的if
子句,等等。
答案 1 :(得分:1)
奇怪的用法,因为python在技术上没有明确的switch语句,就是使用ifs的组合作为具有穿透性的伪开关。
我不会在技术上推荐这个,因为它有点难以调试和维护,而且不是非常pythonic,但它是一个正常的选项,如果/ elif不合适。
def do_something(x):
y = ""
if x == 1:
y += "This and "
if x == 1 or x == 2:
y += "That"
if x == 3:
y += "The Other"
return y
编辑:
至于您提供的代码,主要区别在于创建的逻辑。一系列ifs将被设置为可评估,因此您可能遇到以您不期望的方式修改变量的问题。
if / elif只会在达到有效声明或最终其他声明之前进行评估。
所以简短的回答是你 MAY 想要一系列if而不是if / elifs如果你正在处理影响多个变量的多个触发器,模拟带有穿透的开关,或者它是基于每个if的简短回报语句。大多数情况下if / elif会更正确,效率更高。
此外,在编译结束时,编译器可能能够使用if / elifs而不是一系列ifs更好地处理分支预测。