python - Python如何知道函数的结尾在哪里?

标签 python syntax indentation

我刚学python,当函数的“def”结束时感到困惑?

我看到如下代码示例:

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

myfunc()

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

谢谢

最佳答案

在 Python 中,空格很重要。当缩进变小(更少)时函数结束。

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

注意,单行函数可以不用缩进写在一行上:

def f(): pass

还有,还有分号的使用,但不推荐:

def f(): pass; pass

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

  • 使用 return 语句。这与您可能知道的任何其他命令式编程语言中的工作方式相同。

  • 使用 yield 语句。这意味着该函数是一个生成器。解释它的语义超出了这个答案的范围。看看Can somebody explain me the python yield statement?

  • 只需执行最后一条语句。如果没有更多语句并且最后一个语句不是 return 语句,则该函数存在,就好像最后一个语句是 return None。也就是说,如果没有明确的 return 语句,函数将返回 None。这个函数返回None:

    def f():
        pass
    

    这个也是如此:

    def f():
        42
    

关于python - Python如何知道函数的结尾在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1573548/

相关文章:

python - np.inf 和 float ('Inf' 之间的区别)

python - 如何注册一个在按下 Ctrl+C 后立即运行的 SIGINT 处理程序?

haskell - 由于我使用了守卫,我的代码导致解析错误

sql - 用于从特定行生成列的大查询语法

c++ - 在 Xcode 上打开用 emacs 编写的代码出现严重缩进

python - 为什么 SQLite Select 语句比 numpy.select 慢得多?有什么办法可以加快速度吗?

python - 读取库方法定义

javascript - 使用数学优化使用 jQuery 修改 CSS 值的语法

ruby-on-rails - Haml - if-else 具有不同的缩进

java - 缩进空行 (IntelliJ IDEA)