Python def function: How do you specify the end of the function?
我只是在学习python,当函数的"def"结束时会感到困惑?
我看到的代码示例如下:
1 2 3 4 5 | def myfunc(a=4,b=6): sum = a + b return sum myfunc() |
我知道它不会因为回报而结束(因为我看过if语句…如果foo大于返回栏,则返回foo bar)。python怎么知道这不是一个调用自身的递归函数?当函数运行时,它是否继续执行程序,直到找到返回?这会导致一些有趣的错误。
谢谢
在Python中,空白非常重要。当缩进变小(变小)时,函数结束。
1 2 3 4 | def f(): pass # first line pass # second line pass # <-- less indentation, not part of function f. |
请注意,一行函数可以在一行上不缩进地编写:
1 | def f(): pass |
另外,还有使用分号,但不建议这样做:
1 | def f(): pass; pass |
上面的三种形式显示了如何在语法上定义函数的结尾。至于语义,在Python中,退出函数有三种方法:
使用
return 语句。这与您可能知道的任何其他命令式编程语言的工作原理相同。使用
yield 语句。这意味着函数是一个生成器。解释它的语义超出了这个答案的范围。看看有人能给我解释一下python yield语句吗?只需执行最后一条语句。如果没有更多的语句,并且最后一条语句不是
return 语句,那么函数的存在就好像最后一条语句是return None 语句一样。也就是说,如果没有显式的return 语句,函数将返回None 。此函数返回None :1
2def f():
pass这个也是:
1
2def f():
42
python对缩进很敏感。一旦缩进级别回落到定义函数的级别,函数就结束了。
准确地说,当一个块遇到一个非空行时,它将结束,该行最多与起始行缩进相同的级别。此非空行不是该块的一部分例如,以下打印同时结束两个块:
1 2 3 4 5 | def foo(): if bar: print"bar" print"baz" # ends the if and foo at the same time |
缩进级别小于或等于def和if,因此它将两者都结束。
没有语句的行,无论是缩进,都不重要
1 2 3 4 | def foo(): print"The line below has no indentation" print"Still part of foo" |
但标记块结尾的语句必须缩进到与任何现有缩进相同的级别。那么,以下是一个错误:
1 2 3 | def foo(): print"Still correct" print"Error because there is no block at this indentation" |
通常,如果您习惯大括号语言,只需像它们一样缩进代码,就可以了。
顺便说一句,缩进的"标准"方式只使用空格,但当然只使用制表符,但请不要将两者混合使用。
有趣的是,如果您只是在python交互式解释器中键入内容,那么您必须遵循一个带有空行的函数。这不起作用:
1 2 3 | def foo(x): return x+1 print"last" |
尽管它在文件中是完全合法的python语法。在给解释器输入时,还有其他的语法差异,所以要小心。
空白很重要。当块完成时,即函数定义完成时。
当函数运行时,它会一直运行直到完成,或者直到遇到
在本教程中有更多的信息。
所以凹痕很重要。正如这里的其他用户向您指出的,当缩进级别与def函数声明处于同一点时,您的函数已经结束。请记住,不能在Python中混合制表符和空格。大多数编辑器都对此提供支持。
它使用缩进
1 2 3 4 5 6 7 | def func(): funcbody if cond: ifbody outofif outof_func |