【发布时间】:2014-07-07 21:07:23
【问题描述】:
def foo:
return 1
print(varsum)
打印命令是否仍会被执行,或者程序是否会在 return() 处终止
【问题讨论】:
-
return之后什么都不会做 -
该代码无效,因为返回在函数之外。
-
你试过执行吗?
def foo:
return 1
print(varsum)
打印命令是否仍会被执行,或者程序是否会在 return() 处终止
【问题讨论】:
return之后什么都不会做
两者都没有。会发生什么是函数会返回。 print 不会被执行。该脚本可能会或可能不会终止,具体取决于调用asdf() 的代码。
【讨论】:
事实上,return 语句会结束你的函数。所以你的打印不会被执行。
Here a similar question about it, and lot of interesting answers
【讨论】:
函数将返回,并在堆栈的下一帧继续。在 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
【讨论】:
return 语句将结束当前写入的范围。因此,如果您从一个函数返回,它将返回到调用该函数的位置。如果你在主 python 脚本中返回,它将把控制权交给运行它的操作系统。
【讨论】: