2014-12-13 98 views
-1

有誰知道如何做到這一點?Python 2.7從函數中獲取返回值而不再運行函數中的內容?

我想獲得函數的返回值..但我不希望函數再次運行。這是語音識別,所以每當它再次運行時,它都會嘗試查看用戶所說的內容。我只需要保存的變量。

我也不能使用全局變量的方式。

編輯:

def voiceRecognition(self): 
    <A bunch of voice recognition stuff here> 
    return whatUserSaid 

的代碼,我把它叫做:

SPEECH.voiceRecognition() 

的原因語音和自我爲B/C是一個類的一部分,我在調用它不同的Python文件。現在它正在工作......我只需要返回變量whatUserSaid,而不是通過重新運行函數來獲取值。

+1

那麼,你的代碼在哪裏? – 2014-12-13 18:27:33

+1

需要顯示一些代碼 - 你知道當你調用一個函數時,你可以將它分配給一個變量 - 如果你想避免全局變量,那麼你需要考慮類。 – 2014-12-13 18:27:40

+0

我們需要在調用該函數時看到代碼! – 2014-12-13 18:31:02

回答

1

從你給出的代碼看,你已經將它構建到一個類中,所以我要對此做出一些假設。

class VoiceRecognizer(object): 
    def __init__(self, *args, **kwargs): 
     self.last_phrase = None 

    def voiceRecognition(self): 
     # your code here 
     self.last_phrase = whatUserSaid 
     return whatUserSaid 

這應該讓你做這樣的事情:

v = VoiceRecognizer() 
v.voiceRecognition() 
v.last_phrase # is the last return of voiceRecognition 

但我真的不知道你爲什麼要這麼做。你不能把它保存到一個變量?

last_phrase = v.voiceRecognition() # like this? 
+0

工作...謝謝。我不能這麼做,因爲我使用的模塊是絕對垃圾。我實際上不得不編輯它,甚至使其工作。 – Richard 2014-12-13 18:51:13

1

您可以使用類實例並記憶該值。

class VoiceRecognizer(): 

    def __init__(self): 
     self._parsed = {} 

    def recognize(self, speech): 
     key = function_to_turn_speech_into_unique_string(speech) 
     if key not in self._parsed: 
      self._parsed[key] = recognize_function(speech) 
     return self._parsed[key] 

recognizer = VoiceRecognizer() 
recognizer.recognize(speechA) # will compute 
recognizer.recognize(speechA) # will use cache 
recognizer.recognize(speechB) # will compute if speechA == speechB 
+0

你第一次把新東西放到'辨認'的方法中,你會在遞歸過程中失敗太深 – 2014-12-13 18:37:22

+0

花了我一分鐘才明白你在說什麼 - 我們都是錯的。代碼會出錯,但是'NameError:全局名'識別'未定義'。我打算調用現有的「識別」 - 而不是「self.recognize」 - 因此我將其重命名爲「recognizable_function」。 – 2014-12-13 19:12:58