【问题标题】:More than 2 rules for return in def() Pythondef() Python 中超过 2 条返回规则
【发布时间】:2020-05-06 06:35:18
【问题描述】:

如果我创建这样的函数,是否可以添加更多 ifelif 语句? continue 用于负数或break 用于一条大线中的大值?没有if:if: 树? factorial() 仅作为示例。

from functools import reduce

def factorial(n):
    """return n!"""
    return 1 if n<2 else reduce(lambda x, y: x*y, {i+1 for i in range(n)}) 

【问题讨论】:

  • 这是经典。 “是的,但为什么呢?”
  • 类似return "negative" if n &lt; 0 else 1 if n == 1 else reduce(lambda x, y: x*y, {i+1 for i in range(n)}) ?

标签: python if-statement return


【解决方案1】:

是的,你可以。 a if b else c 三元表达式中的每个部分都是一个表达式,它也可以是一个三元,因此您可以将许多三元链接在一起,例如a if b else c if d else e。没有括号,评估顺序是从左到右,即就像你读到的那样,但你也可以添加括号,例如使用三元作为条件。这是否非常易读是另一个问题。

谈到可读性:虽然您可以将它们链接起来,但您可以考虑不要将它们全部链接在一行中,以便在简洁性和可读性之间取得更好的折衷:

def factorial(n):
    return -1 if n < 0 else \
            1 if n < 2 else \
            n * factorial(n-1)

记住续行 \ 或在整个表达式周围加上括号。但是请注意,continuebreak 都不能使用,因为它们只能在循环内部工作。

【讨论】:

  • 很好的答案!谢谢。
【解决方案2】:

您可以使用 if-elif-else 结构而不是条件表达式:

def factorial(n):
   if n<0:
       return None
   elif n<=1:
       return 1
   else:
       return reduce(lambda x, y: x*y, {i+1 for i in range(n)}) 

【讨论】:

  • 是的,但我想在一行中完成,如果我需要使用新语句编辑代码,我不需要重构所有函数。这不是一个问题,而是关于我们如何编辑我们的代码并理解 python 是如何工作的。
猜你喜欢
  • 2014-09-05
  • 2017-02-15
  • 1970-01-01
  • 2020-09-03
  • 2018-04-16
  • 2014-02-11
  • 2017-12-23
  • 2019-03-17
  • 1970-01-01
相关资源
最近更新 更多