Python def函数:如何指定函数的结尾?
我只是在学习python,对函数的“def”何时结束感到困惑 我看到的代码示例如下:Python def函数:如何指定函数的结尾?,python,syntax,Python,Syntax,我只是在学习python,对函数的“def”何时结束感到困惑 我看到的代码示例如下: def myfunc(a=4,b=6): sum = a + b return sum myfunc() 我知道它不会因为返回而结束(因为我看到了if语句……if FOO比return BAR,else return FOOBAR)。Python如何知道这不是一个调用自身的递归函数?当函数运行时,它是否会继续遍历程序,直到找到返回值?这会导致一些有趣的错误 谢谢空格很重要。块完成时,即函数定
def myfunc(a=4,b=6):
sum = a + b
return sum
myfunc()
我知道它不会因为返回而结束(因为我看到了if语句……if FOO比return BAR,else return FOOBAR)。Python如何知道这不是一个调用自身的递归函数?当函数运行时,它是否会继续遍历程序,直到找到返回值?这会导致一些有趣的错误
谢谢空格很重要。块完成时,即函数定义完成时 当函数运行时,它会一直运行,直到它完成,或者直到遇到
return
或yield
语句。如果函数结束时未遇到返回
或产生
语句,则隐式返回无
在Python中有更多的信息。在Python中,空格非常重要。当缩进变小(更小)时,函数结束 此外,还可以使用分号,但不建议使用分号:
def f(): pass; pass
上述三种形式显示了函数的结尾是如何按语法定义的。至于语义,在Python中有三种退出函数的方法:
- 使用
语句。这与您可能知道的任何其他命令式编程语言的工作原理相同return
- 使用
产生
语句。这意味着该函数是一个生成器。解释它的语义超出了这个答案的范围。看看
- 只需执行最后一条语句。如果没有更多的语句,并且最后一条语句不是
语句,则该函数的存在就如同最后一条语句是return
一样。也就是说,如果没有显式的returnnone
语句,函数将返回return
。此函数返回None
:None
这一个也是:def f(): pass
def f(): 42
def func():
funcbody
if cond:
ifbody
outofif
outof_func
精确地说,当一个块遇到一条非空行时,它就结束了,这条非空行的缩进程度与起始位置最多相同。此非空行不是该块的一部分 例如,以下打印同时结束两个块:
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"
一般来说,如果您习惯于花括号语言,只需像它们一样缩进代码就可以了
顺便说一句,缩进的“标准”方式是只使用空格,但当然只能使用制表符,但请不要将两者混合使用。所以缩进才是最重要的。正如这里的其他用户向您指出的,当缩进级别与def函数声明处于同一点时,您的函数就结束了。请记住,在Python中不能混合使用制表符和空格。大多数编辑器都支持这一点。有趣的是,如果您只是在python交互式解释器中键入,则必须遵循带有空行的函数。这不起作用:
def foo(x):
return x+1
print "last"
虽然它是文件中完全合法的python语法。在向解释器输入时,也存在其他语法差异,因此要小心。在我看来,最好通过注释明确标记函数的结尾
def func():
# funcbody
## end of subroutine func ##
关键是某些子例程非常长,不便于向上滚动编辑器以检查哪个函数结束。此外,如果使用升华,可以右键单击->转到定义,它将自动跳转到子程序声明。Wow。。。我没想到。从来没有听说过缩进只用于可读性。谢谢这是一个非常好的评论。任何对Python的介绍都会提到重要的空白是最早的东西之一,如果不是最早的话——毕竟这是Python最独特的特性之一。到目前为止,我只是在使用这个备忘单:尝试学习语法。如果你有很好的教程建议,我是开放的。谷歌的任何教程。他们可能稍微好一点。备忘单上说“块是由以冒号(:)结尾的语句后面的缩进表示的,如…”,因此它不会误导您。最好的方法是深入研究Python。我认为这是编写Python函数的明智方法。没有空行的“缩进”似乎是一种麻烦。这与其说是与解释器的“语法”差异,不如说是一种实际差异——唯一的原因是,否则就无法在解释器中编写多行函数,解释器清楚地表明,您仍然在使用前面的
…
编写函数定义的一部分。事实上,在函数定义之后不应该有空行,也不应该有空行。
def foo(x):
return x+1
print "last"
def func():
# funcbody
## end of subroutine func ##