2012-02-27 101 views
7

我想知道是否有人可以想出一种方法来检查函数是否需要在Python中返回有意义的值。即检查返回值是否将用于任何事情。我猜测答案是否定的,最好重构我的程序流程。有问题的函数从网络套接字中提取返回值。如果返回值不会被使用,我不想浪费资源获取结果。检查是否有什么“等待”函数的返回值

我试过已经使用回溯来发现呼叫线路,但没有奏效。这里有一个我想到的例子:

>>> def func(): 
... print should_return() 
... 
>>> func() 
False 
>>> ret = func() 
True 

函数“知道”它的返回值正在分配。

这是我目前的解决方法:

>>> def func(**kwargs): 
... should_return = kwargs.pop('_wait', False) 
... print should_return 
... 
>>> func() 
False 
>>> ret = func(_wait=True) 
True 
+4

Python中的所有函数总是返回。如果你没有明确返回,函数返回'None'。 – birryree 2012-02-27 02:43:18

+2

Python函数不会总是返回。但是,如果它们返回,那么它们总是返回一个值,除非指定,否则为None。 – Arafangion 2012-02-27 02:47:00

+0

我明白,但大多数情况下,返回'None'的函数相当于不返回任何内容。在这种情况下,我需要检查它是否应该返回“None”以外的任何内容。 – Violet 2012-02-27 02:48:19

回答

3

import this身体非常第二行说,这一切:“显式优于隐式”。在这种情况下,如果您提供可选参数,代码将更加明显(因而更易于理解),更简单,更快速,更安全。将它作为一个单独的参数,并使用像wait这样的名称。

虽然很难实现它,但它会是令人讨厌的代码,容易打破新版本的Python,并且不明显。避开那条路线;有通往疯狂的路。

4

所有函数返回一个值,当他们完成。

如果你问他们是否应该返回的话,那么你实际上是在问The Halting Problem

+0

我知道任何函数都会返回一个值,我更多的问是否可以确定一个函数是否应该返回一个_meaningful_值。 – Violet 2012-02-27 02:52:55

+0

“意义”是什么意思?这仍然是同样的停滞问题。 – Arafangion 2012-02-27 03:36:35

0

Python中的所有函数总是返回。如果你没有明确返回,函数将返回None。

===========

高清FUNC(): 而真: 通

这个函数不返回。

没有办法确定任意函数是否会返回。如果可以的话,你已经解决了图灵问题。

0

您可能会考虑返回未来或“承诺”。也就是说,返回另一个函数,在执行时执行必要的工作以实际确定结果。我似乎认为你需要懒惰的评估,即“只评估你需要的东西”(或多或少),而不是你的问题,这会让人困惑地问:“只有在它返回一个可能需要的值时才进行评估”。