当前位置: 首页 > 知识库问答 >
问题:

python:通过if/elif语句传递值[duplicate]

屠昌胤
2023-03-14

我有一个函数可以返回三个值中的一个: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

共有3个答案

宇文俊风
2023-03-14

如果/elif和Python没有开关语句,就没有办法做到这一点。你需要临时变量。

如果您知道a、b和c的确切值,也可以使用分派表。它更详细一点,但是如果您有很多可能的分支,它将更快,并且可能更容易遵循。

要制作调度表:

  • 为每个分支创建一个函数
  • 制作一本字典,将a、b、c映射到它们相应的函数
  • 将所有代码替换为return DISPATCH_TABLE[f()]()

你可以在这里找到一些例子。

仲孙疏珂
2023-03-14

如果你只想映射答案(不需要进一步计算),那么你可以用一个简单的映射函数来解决它(类似于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()之间有一个不可预见的值。get(f(),None)将默认为None

东方吕恭
2023-03-14

可能不是您想要的,但一种选择是使用函数字典:

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中没有这样的特性。

 类似资料:
  • Python的语句是否有等价物,类似于它的语句?这可以让我们简化这一点: 为此: 其中只有在满足条件并运行其“do东西”后才会被调用?相反,如果不满足条件,代码将不会被运行。 我不想滔滔不绝地说亵渎,但我能描述它的最好方式是在每一块“做事情”的末尾都有一个<code>GOTO。 本质上,它与< code>else语句相反。虽然< code>else仅在不满足其他条件时运行,但它仅在满足另一个条件时

  • 本文向大家介绍Python if, elif, else,包括了Python if, elif, else的使用技巧和注意事项,需要的朋友参考一下 示例 在Python中,您可以定义一系列条件if,第一个条件用于elif其余条件,直到最后一个(可选)else用于其他条件条件未捕获的任何条件。 产出 Number is bigger than 2 使用else if代替elif会触发语法错误,因此是

  • 问题内容: 是否可以通过if条件执行多个分配,如以下代码? 问题答案: 否。根据规范,在if语句的开头仅允许一个“简单语句” 。 该建议的方法是这可能会返回一个错误,所以我想你想是多重考验:

  • 我似乎搞不清楚下面的语句与和有关的问题是什么。请记住,仍然在开发中,我只是还没有能够在语句中测试它,所以很可能是错误的。 我得到的错误是: 而语句是这样的。

  • 本文向大家介绍Python中的if、else、elif语句用法简明讲解,包括了Python中的if、else、elif语句用法简明讲解的使用技巧和注意事项,需要的朋友参考一下 下面我们学习if语句,输入下面的代码,确保能够正确运行。 运行结果 加分练习 通过上面的练习,我们自己猜测一下if语句的作用,用自己的话回答下面的问题。 1. 你认为if对它下面的代码做了什么? 判断为True就执行它下面的

  • Python3 实例 以下实例通过使用 if...elif...else 语句判断数字是正数、负数或零: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com # 用户输入数字 num = float(input("输入一个数字: ")) if num > 0: print("正数") elif num == 0: pri