2016-11-12 121 views
0

我陷入了一種情況,我需要將某個函數返回的某個值(它總是隨機/不同的)傳遞給另一個函數,以及函數將被調用是未定義的,因爲它將根據用戶輸入在運行時計算。將函數返回的一些隨機值傳遞給另一個函數

例如,

def func1(some_value): 
    # Use some_value for whatever purpose 
    # Some code 
    return some_random_value 

def func2(some_value): 
    # Use some_value for whatever purpose 
    # Some code 
    return some_random_value 

def func3(some_value): 
    # Use some_value for whatever purpose 
    # Some code 
    return some_random_value 

因此我們假設如果func2首先被調用,任何初始/默認值作爲參數傳遞some_value和函數將返回some_random_value。現在,我不知道接下來會調用哪個函數,但是從上一個函數返回的函數some_random_value(此例中爲func2)應該作爲參數some_value傳遞給下一個調用的函數(讓它爲func1)。這個過程繼續下去。

什麼可能是實現這個建議的方式?這應該使用一個全局變量來完成,每次函數運行時都會修改它的值以存儲函數的返回值?如果是,那麼如何?

更具體

甲CLI將允許用戶選擇一些動作和適當的功能將根據該動作被調用。從函數返回的最後一個值應該在內存中,直到應用程序結束。一個函數執行它的任務後,它會返回一個值。使用CLI操作調用任何其他函數時,該值是必需的。再一次,下一個函數將使用最後一個函數的返回值處理一些數據,然後返回一些處理後的值,稍後將由下一個函數或CLI操作使用。

我的想法一樣,而不是返回任何這些功能的價值,創建具有默認值的全局變量:

common_data = 'some string' 

然後在每個函數的定義,添加:

global common_data 
common_data = 'new processed string' 

這將確保任何下一個函數調用都將被傳遞上一個函數最後保存在common_data中的值。

但這似乎是一個不推薦的解決方案,至少我認爲是這樣。

如果我無法正確解釋我的情況,請允許我編輯或詳細說明此問題。

謝謝

+0

將一個函數的返回值作爲參數傳遞給下一個函數調用時出現了什麼問題?這似乎正是你想要的,而且命令是由調用者決定的 – UnholySheep

+0

@UnholySheep假設func2先運行,然後我不知道接下來將執行哪個函數。所以,我不需要將func2的返回值存儲在某個變量中,以將它作爲參數傳遞給下一個函數調用?可能我太困惑了,我錯過了一些基本概念。 – Forthaction

+0

沒有足夠的有關這些數據的生命週期的信息,如何調用其他函數,以及隨機數據與呼叫之間的關係。這些函數可以移動到一個類,其中隨機數據是所有方法可用的實例變量。但是,這隻適用於某些類型的設計。我認爲這將被封閉得太廣泛,因爲真的沒有辦法回答它。 – tdelaney

回答

0

我將提供此遞歸錯誤。 ^^

from random import choice 
from random import randint 


def get_fs(f): 
    return [x for x in (func1, func2, func3) if x != f] 


def func1(some_value, fs): 
    # Use some_value for whatever purpose 
    # Some code 
    f = choice(fs) 
    print("func1", f.__name__) 
    return f(randint(1,10), get_fs(func1)) 


def func2(some_value, fs): 
    # Use some_value for whatever purpose 
    # Some code 

    f = choice(fs) 
    print("func2", f.__name__) 
    return f(randint(1,10), get_fs(func2)) 


def func3(some_value, fs): 
    # Use some_value for whatever purpose 
    # Some code 

    f = choice(fs) 
    print("func3", f.__name__) 
    return f(randint(1,10), get_fs(func3)) 


def main(): 
    functions = [func2, func3] 
    func1(randint(1,10), functions) 


if __name__ == '__main__': 
    main() 
相關問題