【问题标题】:Python can the line "return x if y" be used?Python可以使用“return x if y”这一行吗?
【发布时间】:2020-05-21 10:41:04
【问题描述】:

this answer 中声明您可以在 python 3 中使用return A+1 if A > B else A-1,但是当我尝试使用它时:

def max3(a,b,c):
    return a if a > b and c
    return b if b > c else c

我收到一个无效的语法错误。我已经尝试在网上查找,但我找不到任何关于此的内容,如果有人可以提供帮助,我将不胜感激。

谢谢。

【问题讨论】:

  • 你错过了 else 部分
  • 函数只能有一个返回
  • @rdas 函数可以有很多没有代码块的返回语句,但只有第一个可以生效
  • @YangHG *无条件退货声明

标签: python python-3.x return syntax-error


【解决方案1】:

你可以嵌套conditional expression:

def max3(a,b,c):
    return a if a > b and a > c else b if b > c else c

只要确保始终有一个 else 部分,否则表达式将不知道要评估什么。这是否是最易读的解决方案充其量是值得怀疑的。最少的行/字节没有价格(除非您正在玩代码高尔夫)。

另请注意,a > b and ca > b and a > c 相同。您可以将其缩短为b < a > c,但可读性将受到另一个的影响。

【讨论】:

  • 当然这很快就会变得难以理解,所以……请不要使用其他方法。
  • 我同意,不过,这个问题一开始就纯粹是学术性的。这演示了a if b else c 语法的工作原理。
  • 如果我们在学术上讨论,请不要将此语法称为“运算符”。
  • @MarcinOrlowski 即使是官方 python 文档也将conditional expression 称为“三元运算符”。
  • 不过,它不是运算符。
【解决方案2】:

函数中的第二个 return 语句不会有任何效果,并且该函数将返回第一个 return 语句返回的任何内容。 在第一个 return 语句中必须有一个 else 否则它将是一个语法错误。 所以,应该是

return a if a>b else b

以 3 个整数计算最大值

return a if a > b and a > c else b if b > c else c

【讨论】:

    【解决方案3】:

    def max3(a,b,c): 如果 a > b 且 a > c: 返回一个 elif b > c 其他 a > c: 返回 b

    在条件语句的末尾使用冒号。

    使用“else:”部分不是强制性的。

    【讨论】:

    • 行“elif b > c and a > c: return b”必须在另一行。
    • 在我的回答中,所有的行都变成了一行。
    • 在条件语句之后写return语句。请为我的答案投票。
    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 2015-07-21
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多