最近,我开始好奇下面这段伪python代码的第二行会发生什么:
def my_fun(foo,bar):
foo
return foo + bar
我开始感兴趣的原因是,我正在尝试Light Table,并试图在“foo”上放置一块手表。它似乎导致python解释器挂起。
我认为这一行绝对没有影响,也不会导致任何类型的错误,这是正确的吗?有人能解释一下解释器在这里到底是做什么的吗?
发布于 2014-01-21 22:28:19
什么都没发生。它等同于查看dis
输出的无意义操作
In [3]: dis.dis(my_fun)
2 0 LOAD_FAST 0 (foo)
3 POP_TOP
3 4 LOAD_FAST 0 (foo)
7 LOAD_FAST 1 (bar)
10 BINARY_ADD
11 RETURN_VALUE
我们可以看到,它对foo
的加载速度很快,然后什么也不做。
发布于 2014-01-21 22:27:15
在命令行中尝试一下:它只返回foo
中的值。这并不意味着它在某些特殊情况下不会有副作用:如果你这样做:
def my_fun(foo, bar):
foo.prop
return foo.func(bar)
即使从技术上讲,我们只是返回值,如果它被定义为一个属性,那么foo.prop
实际上可以调用一个函数。
但通常..。您不会在模块中执行此操作,只能在交互式控制台中执行此操作。
发布于 2014-01-21 22:28:52
什么都不会发生:
>>> def baz(foo, bar):
foo
return bar
>>> baz(10, 20)
20
该声明没有任何效果。
https://stackoverflow.com/questions/21260745
复制相似问题