python:通过if / elif语句管道化一个值
这个问题在这里已经有了答案:
可能不是你想要的,但一种选择是使用函数字典:
def do_a();
..
def do_b();
..
def do_c();
..
strategy = {
a: do_a,
b: do_b
c: do_c
}
strategy[f()]()
但是,通常情况下,如果字典条目未找到,您可能需要进行一些错误处理,在这种情况下,您最终可能会得到一个单独的变量,再加上您现在必须将每个个案提取到自己的函数中。
也许更不相关,如果只有两种情况你可以使用三元运算符:
do_a() if f() == a else do_b()
虽然可能你已经知道这一点,再加上你的问题有两种以上的情况,再加上很多人不喜欢三元运算符,但无论如何。
如果你有一个带有switch语句的语言,比如C#/ Java / C ++等,或者模式匹配语句,比如Haskell / OCaml / F#/ Scala / Erlang等等,那么你可以使用它们。 模式匹配语句如下所示:
match f() with
| a ->
// do something
// and maybe something else too
| b ->
// do some other thing
// and yet some other thing
但Python中没有这样的功能。
如果你只想映射答案(没有进一步计算),那么你可以用一个简单的映射函数来解决它(类似于junichiro的答案):
import random
def f():
foo = ['a', 'b', 'c', 'd', 'e']
return random.choice(foo)
if __name__ == '__main__':
from_to = dict(a=2, b=1, c=3, d=4, e=5)
print(from_to.get(f(), None))
如果你有一个来自f()
的不可预见的值,那么from_to.get(f(), None)
默认为None
if / elif没有办法做到这一点,Python没有switch语句。 你需要临时变量。
如果您知道a,b和c的确切值,您可以使用调度表。 这有点冗长,但如果你有很多可能的分支,它会更快,并且可能更容易遵循。
制作派送表:
return DISPATCH_TABLE[f()]()
你可以在这里找到一些例子。
链接地址: http://www.djcxy.com/p/42767.html