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

Dan*_*Dan 42 python syntax

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

我看到代码示例如下:

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

myfunc()
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Ste*_*202 63

在Python中,空白是重要的.当压痕变小(较小)时,该功能结束.

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

请注意,单行函数可以在没有缩进的情况下写入一行:

def f(): pass
Run Code Online (Sandbox Code Playgroud)

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

def f(): pass; pass
Run Code Online (Sandbox Code Playgroud)

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


ffo*_*orw 34

Python在缩进方面是白空间敏感的.一旦缩进级别回落到定义函数的级别,该函数就结束了.

  • 哇......没想到.从未听说过缩进被用于除可读性之外的任何东西.谢谢! (5认同)

Ric*_*chN 9

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

def foo():
    if bar:
        print "bar"

print "baz" # ends the if and foo at the same time
Run Code Online (Sandbox Code Playgroud)

缩进级别小于或等于def和if,因此它们两者都结束.

没有陈述的行,无论缩进,都无关紧要

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

    print "Still part of foo"
Run Code Online (Sandbox Code Playgroud)

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

def foo():
    print "Still correct"
   print "Error because there is no block at this indentation"
Run Code Online (Sandbox Code Playgroud)

一般来说,如果你习惯于花括号语言,只需将代码缩进它们就可以了,你会没事的.

顺便说一句,缩进的"标准"方式仅限于空格,但当然只有标签是可能的,但请不要将它们混合在一起.


Gar*_*ryO 5

有趣的是,如果您只是在 python 交互式解释器中输入,则必须在函数后面添加一个空行。这不起作用:

def foo(x):
  return x+1
print "last"
Run Code Online (Sandbox Code Playgroud)

尽管它在文件中是完全合法的 python 语法。在解释器中输入时也存在其他语法差异,所以要小心。