我不理解python中的用户定义函数

Posted

技术标签:

【中文标题】我不理解python中的用户定义函数【英文标题】:Im not understanding user defined functions in python 【发布时间】:2020-09-20 12:29:38 【问题描述】:

我是 python 新手。谁能解释一下 a,c,b 是如何打印的?我知道 foo 首先执行然后打印 a 但之后我什么都不懂。

    def foo():
        print("a")
        bar()
        print("b")
    def bar():
        print("c")
    foo() 

    Output:
    a
    c
    b

【问题讨论】:

你猜到发生了什么吗?你认为应该发生什么? 在打印 a 之后,函数 foo 调用 bar 其打印 c 然后返回到打印 b 的函数 foo。问题出在哪里? 【参考方案1】:

你有 2 个单独的函数:foo() 和 bar()

def foo():
    print("a")
    bar()
    print("b")
    
def bar():
    print("c")

foo()

这两个函数都在初始化(加载但未执行)但未调用(执行)。 最后的 foo() 语句现在将只调用 foo() 函数。

好的,现在让我们一步一步来看看 foo() 函数。

    它 print("a") - 正如预期的那样 它调用 bar() 函数。因此,我们现在转到 bar() 函数。 正如我们所见, bar() 函数将打印(“c”)并在那里结束。 因此,我们回到 foo() 函数并继续。 print("b") 将被执行。

【讨论】:

【参考方案2】:

会发生这样的事情:

    第一个函数绑定到名称foo。 第二个函数绑定到名称bar。 我们调用绑定到foo的函数:
      我们将"a" 打印到控制台。 我们调用绑定到bar的函数:
        我们将"c" 打印到控制台。 到达函数末尾,我们返回None
      没有对bar()的返回值做任何事情,所以我们把它扔掉了。 我们将"b" 打印到控制台。 到达函数末尾,我们返回None
    没有对foo()的返回值做任何事情,所以我们把它扔掉了。 我们已经到了脚本的末尾,所以 Python 正常退出了。

【讨论】:

【参考方案3】:

正如您提到的,首先调用foo 并打印a。然后在foo 函数中我们调用bar,在bar 中我们打印c 然后函数bar 返回到foo 函数并继续打印b。我希望它能澄清更多正在发生的事情。

【讨论】:

以上是关于我不理解python中的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章

自动化测试时需要使用python,请问如何理解python中的全局变量和局部变量?

我不理解 Python 中的这种缩进 [重复]

Pyspark:如何处理 python 用户定义函数中的空值

理解Python中的闭包

轻松理解python中的闭包和装饰器 (下)

JMeter中的用户定义函数