【问题标题】:Is `return` alone equivalent to `return(None)` in Python 3.8?单独的`return`是否等同于Python 3.8中的`return(None)`?
【发布时间】:2020-05-24 05:51:17
【问题描述】:

刚刚看到下面的Python代码,对第一个return有点迷糊。它是否默认返回None?是否等同于return(None)?如果第一个return被执行,函数inner()会自动结束,而第二个return会被不管吗?

def smart_check(f):
    def inner(a,b):
        if b==0:
            print("illegit: b =", b)
            return   # the first return
        return(f(a,b))
    return(inner)

@smart_check
def divide(a,b):
    return(a/b)

【问题讨论】:

  • 单独的return 将退出函数并返回None 值。
  • 旁白:return 关键字不是函数调用或运算符。额外的括号是多余的,通常不包括在内。当目标是返回一个元组时,它们也可能与/隐藏混淆。
  • @pyOliv 谢谢!这说明白了!顺便说一句,有没有办法退出函数而不返回任何东西?
  • 括号在任何版本中都不需要返回。对于 print 和 Python 2,括号是强制性的(因为 print 失去了它的关键字/特殊语句状态)。
  • 函数 always 返回 a value 如果它们在没有引发错误的情况下终止(或以其他方式终止 Python)。 None 是一个值,它表示“什么都没有”。这对于“x = f()”是必需的,例如,如果对“f”的调用正常完成,则保证 一个值 将被分配给“x”。有些语言将子例程和函数分开:Python 没有。

标签: python-3.x return return-value return-type nonetype


【解决方案1】:

默认情况下它是否返回 None ?是否相当于return(None)

是的,请参阅docs:如果存在表达式列表,则计算它,否则 None 是 替换

如果第一个return被执行,函数inner() 自动结束,第二次返回不理会?

是的


如果你不想返回任何东西,你甚至可以完全放弃 return 语句:

 def smart_check(f):
    def inner(a,b):
        if b != 0:
            return f(a,b)
        print("illegit: b =", b)
    return(inner)

由于 print 不返回任何内容,您甚至可以将此函数重写为

def smart_check(f):
   def inner(a,b):
       return f(a,b) if b!=0 else print("illegit: b =", b)
   return(inner)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-29
    • 2020-05-20
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多