我只是学习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中有三种退出函数的方法:
使用return声明.这与您可能知道的任何其他命令式编程语言的工作方式相同.
使用yield声明.这意味着该功能是一个发电机.解释其语义超出了本答案的范围.看看有人能解释一下python yield语句吗?
只需执行最后一个语句即可.如果没有更多语句且最后一个语句不是return语句,则该函数就像最后一个语句一样存在return None.也就是说,没有return函数返回的显式语句None.该函数返回None:
def f():
pass
Run Code Online (Sandbox Code Playgroud)
这个也是如此:
def f():
42
Run Code Online (Sandbox Code Playgroud)ffo*_*orw 34
Python在缩进方面是白空间敏感的.一旦缩进级别回落到定义函数的级别,该函数就结束了.
确切地说,一个块在遇到非空行时最终会与开始时相同的级别缩进.此非空行不是该块的一部分例如,以下打印同时结束两个块:
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)
一般来说,如果你习惯于花括号语言,只需将代码缩进它们就可以了,你会没事的.
顺便说一句,缩进的"标准"方式仅限于空格,但当然只有标签是可能的,但请不要将它们混合在一起.
有趣的是,如果您只是在 python 交互式解释器中输入,则必须在函数后面添加一个空行。这不起作用:
def foo(x):
return x+1
print "last"
Run Code Online (Sandbox Code Playgroud)
尽管它在文件中是完全合法的 python 语法。在解释器中输入时也存在其他语法差异,所以要小心。
| 归档时间: |
|
| 查看次数: |
118389 次 |
| 最近记录: |