【问题标题】:How to check single line if else if else condition in Python如何在Python中检查单行if else if else条件
【发布时间】:2015-04-09 11:12:32
【问题描述】:

holiday_type

我有三个不同的答案
holiday_type = Approved
holiday_type = Confirmed
holiday_type = both

Python 代码:

 result = ['confirm','validate'] if holiday_type == 'both' else ['confirm'] if holiday_type == 'Confirmed' else ['validate']

结果:

['validate']                // Approved
['confirm']                 // Confirmed
['confirm', 'validate']     // both

我不明白如何编译这个 if else 语句:先哪一秒。你能解释一下如何编译这个条件流吗?

【问题讨论】:

  • 为什么?它不是pythonic。
  • 关闭原因是这个pythonic............但我只想知道这个执行的流程。因为 for 循环执行从最后开始。
  • 提示:result = ['confirm','validate'] if holiday_type == 'both' else (['confirm'] if holiday_type == 'Confirmed' else ['validate']) - 你可以很容易地看到两个嵌套的类似true_val if condition else false_val 形式的语句。
  • 我说执行流程从最后开始(从右到左)所以在这种情况下这是如何嵌套的
  • @S͢kyD͢ream:不:这里没有简单的从左到右或从右到左的评估顺序。条件表达式true_expr if condition else false_expr 的求值顺序是condition,然后根据需要求值true_exprfalse_expr 之一。

标签: python python-2.7 python-3.x if-statement


【解决方案1】:

不要这样做。可读性很重要。

if holiday_type == 'both':
    result = ['confirm','validate']
elif  holiday_type == 'Confirmed':
    result = ['confirm']
else:
    result = ['validate']

【讨论】:

  • 这不能回答问题(虽然奇怪地使用三元运算 - 是一个有效的密码)。有时您会阅读其他人的奇怪代码,因此您需要在重构之前知道它是如何工作的。
【解决方案2】:

声明

<expression1> if <condition> else <expression2>  

首先评估condition;如果它返回Trueexpression1 将被评估以给出结果,否则expression2

 result = ['confirm','validate'] if holiday_type == 'both' else ['confirm'] if holiday_type == 'Confirmed' else ['validate']  

['confirm'] if holiday_type == 'Confirmed' else ['validate']expression2,如果holiday_type == 'both' 被评估为False,它将被评估。

【讨论】:

    【解决方案3】:

    这是一个嵌套的 if-else

    一般来说 - x if cond else y 是正常的语法或语句的一种类型

    现在这里xy 可以是独立的语句集

    您可以扩展它们。

    就像在你的情况下y 是相同的声明-> x if cond else y 于是就变成了

    x if cond else x1 if cond2 else y1

    【讨论】:

      【解决方案4】:
      result = (['confirm','validate'] if holiday_type == 'both' else
                ['confirm'] if holiday_type == 'Confirmed' else
                ['validate'])
      

      【讨论】:

        【解决方案5】:

        如果不同情况下的表达式不同,这将是有效的,

        expr1 if condition1 else expr2 if condition2 else expr

        例如:

        >>> a = -5
        >>> "negative" if a<0 else "zero" if a==0 else "positive"
        'negative'
        >>> a = 5
        >>> "negative" if a<0 else "zero" if a==0 else "positive"
        'positive'
        >>> a = 0
        >>> "Negative" if a<0 else "zero" if a==0 else "positive"
        'zero'
        

        问题示例:

        result = ['confirm','validate'] if holiday_type == 'both' else ['confirm'] if holiday_type == 'Confirmed' else ['validate']
        

        【讨论】:

          【解决方案6】:

          我将向其他人借用,但通过将其转换为多行来对如何解析这些 oneline if 语句进行更通用的解释。

          expr1 if condition1 else expr2 if condition2 else expr
          

          翻译成

          if condition1:
            expr1
          elif condition2:
            expr2
          else:
            expr
          

          请记住,这种相同的语法风格也用于列表解析和 Python 的其他领域。

          【讨论】:

            猜你喜欢
            • 2023-02-06
            • 1970-01-01
            • 1970-01-01
            • 2019-04-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-19
            • 1970-01-01
            相关资源
            最近更新 更多