【问题标题】:Python function execution orderPython函数执行顺序
【发布时间】:2019-09-09 13:02:36
【问题描述】:

我找不到与此主题相关的任何问题。但是python是在前一个调用的函数完成后执行一个函数还是以任何方式并行执行?

例如:

def a():
    print('a')

def b():
    print('b')

a()
b()

所以在这个例子中我想知道我是否总是可以确定function b 被调用 function a 完成之后,即使function a 是一个很长的脚本?以及这个的定义是什么,所以我可以查找有关这件事的文档。

谢谢!!

【问题讨论】:

  • 是的,python 是一种解释型语言,它与 repl 一起工作——读取、评估、打印、循环,意味着,只要您不使用多线程代码,a() 就会发生在之前b()
  • 默认情况下没有并行执行语言。至少在流行之一中。程序按照定义的顺序一一执行指令。你在一个线程中运行它们。即使你在 a() 中为调用者线程创建了一个单独的线程,它仍然是顺序操作并且 a() 先返回然后 b() 被执行。
  • 取决于需要按顺序/顺序调用多少个函数的复杂性,您可以创建分层状态机

标签: python python-3.x


【解决方案1】:

TLDR:b 只会在 a 退出后运行。

每个 Python 线程一次只会执行一件事,并尊重表达式和语句的顺序。在大多数情况下,这意味着执行“从上到下”,尽管函数定义、控制流和其他元素会影响执行顺序。但是,无论如何都会保留顺序。


严格来说,Python 语言只定义了execution order of expressions

Python 从左到右计算表达式。请注意,虽然 评估分配,右侧在评估之前评估 左侧。

simple statementscompound statements 均未定义评估顺序。

但是,Python 是基于byte code interpreting virtual machine 定义的,参考实现基于stackbased bytecode evaluation loop。 Python 的所有主要实现都保留了一个接一个地执行语句的可观察行为。

【讨论】:

    【解决方案2】:

    定义函数并不意味着它的执行。 因为你先定义了a,所以会先创建a的函数对象,以便调用。

    你可以把它作为从上到下的执行时间线。

    【讨论】:

      【解决方案3】:

      python 中没有函数的并行执行。 上述函数将按照调用它们的顺序执行,无论其中任何一个函数的计算工作量如何。

      【讨论】:

        【解决方案4】:

        在 python 中,函数默认按照它们出现的顺序执行。 但是,如果您以不同的顺序调用它们,它们将照此执行。 所以在你的例子中

        def a():
            print('a')
        def b():
            print('b')
        
        b()
        a()
        

        那么b()会在a()之前执行

        【讨论】:

          猜你喜欢
          • 2014-09-27
          • 1970-01-01
          • 1970-01-01
          • 2016-04-07
          • 2013-04-19
          • 2017-04-21
          • 2015-08-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多