【问题标题】:Im not understanding user defined functions in python我不理解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。问题出在哪里?

标签: python user-defined-functions


【解决方案1】:

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

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

foo()

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

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

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

【讨论】:

    【解决方案2】:

    会发生这样的事情:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-01-06
        • 2019-02-14
        • 2019-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-17
        相关资源
        最近更新 更多