python的def语句_关于语法:python def函数:如何指定函数的结尾?

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

我看到的代码示例如下:

1

2

3

4

5def myfunc(a=4,b=6):

sum = a + b

return sum

myfunc()

我知道它不会因为回报而结束(因为我看过if语句…如果foo大于返回栏,则返回foo bar)。python怎么知道这不是一个调用自身的递归函数?当函数运行时,它是否继续执行程序,直到找到返回?这会导致一些有趣的错误。

谢谢

这是一个很好的评论。对python的任何介绍都提到了重要的空白,这是第一个(如果不是第一个)东西——毕竟,它是最有特色的python特性之一。

到目前为止,我只是使用这个备忘表:ibm.com/developerworks/library/l-craitsheet3.html来尝试学习语法。如果你有好的辅导建议,我会开放的。

谷歌提供任何教程。它们可能稍微好一点。备忘单上写着"这个块是用以冒号(:)结尾的语句后面的缩进来表示的,就像在……"中那样,所以它不会主动误导你。

最好的办法是潜入Python

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

1

2

3

4def f():

pass # first line

pass # second line

pass #

请注意,一行函数可以在一行上不缩进地编写:

1def f(): pass

另外,还有使用分号,但不建议这样做:

1def 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

5def foo():

if bar:

print"bar"

print"baz" # ends the if and foo at the same time

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

没有语句的行,无论是缩进,都不重要

1

2

3

4def foo():

print"The line below has no indentation"

print"Still part of foo"

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

1

2

3def foo():

print"Still correct"

print"Error because there is no block at this indentation"

通常,如果您习惯大括号语言,只需像它们一样缩进代码,就可以了。

顺便说一句,缩进的"标准"方式只使用空格,但当然只使用制表符,但请不要将两者混合使用。

有趣的是,如果您只是在python交互式解释器中键入内容,那么您必须遵循一个带有空行的函数。这不起作用:

1

2

3def foo(x):

return x+1

print"last"

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

我认为这是编写Python函数的明智方法。"没有空行的去缩进看起来像是麻烦的秘诀。

这与解释器的"句法"差异远不止是实际差异——唯一的原因是,否则就无法在解释器中编写多行函数,而且解释器清楚地表明,您仍在使用前导的...编写函数定义的一部分。事实上,PEP8在函数定义之后松散地勾勒出应该和不应该有空行的时间。

空白很重要。当块完成时,即函数定义完成时。

当函数运行时,它会一直运行直到完成,或者直到遇到return或yield语句为止。如果函数在没有遇到return或yield语句的情况下完成,则隐式返回None语句。

在本教程中有更多的信息。

所以凹痕很重要。正如这里的其他用户向您指出的,当缩进级别与def函数声明处于同一点时,您的函数已经结束。请记住,不能在Python中混合制表符和空格。大多数编辑器都对此提供支持。

它使用缩进

1

2

3

4

5

6

7def func():

funcbody

if cond:

ifbody

outofif

outof_func

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值