【问题标题】:does return stop a python script [closed]确实返回停止python脚本[关闭]
【发布时间】:2014-07-07 21:07:23
【问题描述】:
def foo:
    return 1
    print(varsum)

打印命令是否仍会被执行,或者程序是否会在 return() 处终止

【问题讨论】:

  • return之后什么都不会做
  • 该代码无效,因为返回在函数之外。
  • 你试过执行吗?

标签: python return terminate


【解决方案1】:

两者都没有。会发生什么是函数会返回。 print 不会被执行。该脚本可能会或可能不会终止,具体取决于调用asdf() 的代码。

【讨论】:

    【解决方案2】:

    事实上,return 语句会结束你的函数。所以你的打印不会被执行。

    Here a similar question about it, and lot of interesting answers

    【讨论】:

      【解决方案3】:
      1. 打印语句不会被执行。
      2. 程序不会终止。

      函数将返回,并在堆栈的下一帧继续。在 C 中,程序的入口点是一个名为 main 的函数。如果您从该函数中return,则程序本身将终止。然而,在 Python 中,main 在程序代码中被显式调用,因此return 语句本身不会退出程序。

      您示例中的print 语句就是我们所说的dead code。死代码是永远无法执行的代码。 if False: print 'hi' 中的 print 语句是死代码的另一个示例。许多编程语言提供了死代码消除或 DCE,它在编译时去除了此类语句。 Python 的AST compiler 显然有 DCE,但不能保证所有代码对象都可以使用。如果应用 DCE,以下两个函数将编译为相同的字节码:

      def f():
          return 1
          print 'hi'
      def g():
          return 1
      

      但是根据 CPython 反汇编器,DCE 没有被应用:

      >>> dis.dis(f)
        2           0 LOAD_CONST               1 (1)
                    3 RETURN_VALUE        
      
        3           4 LOAD_CONST               2 ('hi')
                    7 PRINT_ITEM          
                    8 PRINT_NEWLINE       
      >>> dis.dis(g)
        2           0 LOAD_CONST               1 (1)
                    3 RETURN_VALUE        
      

      【讨论】:

        【解决方案4】:

        return 语句将结束当前写入的范围。因此,如果您从一个函数返回,它将返回到调用该函数的位置。如果你在主 python 脚本中返回,它将把控制权交给运行它的操作系统。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-15
          • 1970-01-01
          • 2019-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多