Python def函数:如何指定函数的结尾?

我只是在学习python,并且在函数的“def”结束时感到困惑?

我看到如下代码示例:

def myfunc(a=4,b=6):
    sum = a + b
    return sum

myfunc()

我知道它并没有因为返回而结束(因为我已经看到了如果语句...如果FOO比返回BAR,否则返回FOOBAR)。 Python如何知道这不是一个自我调用的递归函数? 当函数运行时,它会继续执行程序,直到它找到返回值? 那会导致一些有趣的错误。

谢谢


在Python中,空白是很重要的。 当缩进变小(小)时,函数结束。

def f():
    pass # first line
    pass # second line
pass # <-- less indentation, not part of function f.

请注意,单行函数可以在一行中不缩进地写入:

def f(): pass

然后,使用分号,但不建议这样做

def f(): pass; pass

以上三种形式显示了函数的结尾是如何在语法上定义的。 至于语义,在Python中有三种退出函数的方法:

  • 使用return语句。 这与您可能知道的任何其他命令式编程语言相同。

  • 使用yield语句。 这意味着该函数是一个生成器。 解释它的语义超出了这个答案的范围。 看看有人可以解释我的Python产量声明?

  • 通过简单地执行最后的语句。 如果没有更多的语句并且最后一个语句不是return语句,那么该函数就像最后一个语句return None 。 也就是说,没有显式的return语句,函数返回None 。 这个函数返回None

    def f():
        pass
    

    这个也是如此:

    def f():
        42
    

  • 对于缩进,Python是空白区域敏感的。 一旦缩进级别降回到定义该函数的级别,该函数就结束了。


    确切地说,一个块在遇到一个非空行时最终与起始位置相同的级别缩进时结束。 此非空行不是该块的一部分例如,以下打印同时结束两个块:

    def foo():
        if bar:
            print "bar"
    
    print "baz" # ends the if and foo at the same time
    

    缩进级别与def和if均小于或等于,因此它们都结束。

    没有声明的行,无论是缩进,都没有关系

    def foo():
        print "The line below has no indentation"
    
        print "Still part of foo"
    

    但是,标记块结束的语句必须与任何现有缩进相同的级别缩进。 那么,以下是一个错误:

    def foo():
        print "Still correct"
       print "Error because there is no block at this indentation"
    

    一般来说,如果你习惯用大括号来表示语言,只需像他们那样缩进代码就可以了。

    顺便说一句,“标准”的缩进方式仅限于空格,但当然只能使用制表符,但请不要将它们混合使用。

    链接地址: http://www.djcxy.com/p/54779.html

    上一篇: Python def function: How do you specify the end of the function?

    下一篇: What are some common uses for Python decorators?