2012-02-27 52 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

您可能會考慮返回未來或「承諾」。也就是說,返回另一個函數,在執行時執行必要的工作以實際確定結果。我似乎認爲你需要懶惰的評估,即「只評估你需要的東西」(或多或少),而不是你的問題,這會讓人困惑地問:「只有在它返回一個可能需要的值時才進行評估」。