2017-04-03 170 views
0

我使用pyhton到名爲遞歸函數的遞歸函數全局變量sphereinput的函數需要返回一個變量名結果作爲output.By宣佈它作爲遞歸函數我西港島線沒有全球在函數結束處使用return。 將函數返回結果具有正確的答案在我的程序的主文件調用時。 我的保留意見是,每次調用自身的功能sphereinput全局變量結果將進行相應的更新,對不對?在蟒蛇

def sphereinput(parameters) 
    global result 
    Recursive call to sphereinput 
    result=assigned value 

請注意,我沒有使用return語句here.Do我有什麼打算? 此外,當我在相同的文件作爲主要代碼中定義它的每一個調用之後起作用它開始執行以下功能的代碼行再次它們的主代碼的一部分,必須不被執行。

如果我在其他文件中定義這個功能我如何把它從主文件,然後哪些變量將同時擁有在主函數代碼文件中定義的全局?

+0

從全局變量的禍害保存自己,只是返回。這很容易,而且出錯的可能性也較小。 – zondo

+1

同意@zondo。而且,你不能立即推斷代碼的作用並不是一件好事。遞歸函數通常應該是無副作用的,也就是說它們不會影響本地範圍以外的任何東西。 –

+0

如果我只是返回變量,即使涉及遞歸,它是否會給出正確答案? –

回答

0

結果將進行相應的更新,但不會返回,除非你明確地這樣做。

我不知道你

的意思還當我在同一個文件中主要的代碼定義它每次調用 功能後,它開始再次執行以下功能的代碼行 是主要部分代碼,不得執行。

從主文件中調用它,你必須先導入模塊(=文件),然後調用它的功能:只要

import myfile 
myfile.sphereinput(args) 

您不必定義結果變量其他地方您在調用sphereinput之前確保不使用它。

可以以另一種方式遞歸調用你的函數,以及,這並不需要一個全局變量:

while True: 
    temp = sphereinput(args) 
    if temp is None: 
    break 
    result = temp 

在這裏,你只需返回None,當你不希望任何進一步的遞歸。

+0

感謝您的幫助。如果這不起作用,請詳細說明問題! –