我有一个函数可以返回三个值之一:a、b 或 c。
def f():
return x # a, b, or c
我需要根据 f()
的返回值执行不同的语句:A、B 或 C。据我所知,执行此操作的最佳方法是:
v = f()
if v == a:
# Do A
elif v == b:
# Do B
else:
# Do C
在不引入这个新变量v
的情况下,是否有不同的方法来评估f()
的返回值?
也许是这样的?
if f() == a:
# Do A
elif _value_from_above == b:
# Do B
else:
# Do C
可能不是您想要的,但一种选择是使用函数字典:
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中没有这样的特性。