2016-08-12 61 views
1

下面的腳本工作正常,直到我添加了「def test」,我試圖擺脫所有的全局變量我的編程總的來說,因爲我不是一個偉大的程序員,我希望有一種方法可以做到這一點。將數據中間函數傳遞迴函數Python

我想將「foo」從函數「test」傳遞迴函數「work」,但這不起作用,因爲它不是全局變量。有任何想法嗎?

bar = "bar" 
barnone = "barnone" 

def function_A(): 
    data = 5 
    data1 = 15 
    if host == 1: 
     work(data, data1) 
    else: 
     function_B() 

def function_B(): 
    data = 3 
    data1 = 13 
    work(data, data1) 
    test(data) 
    print foo 

def work(data,data1): 
    print data 
    print data1 
    test(data) 
    print foo 

def test(data): 
    if data == 3:foo = bar 
    elif data == 5:foo = barnone 

if __name__ == '__main__': 
    host = 11 
    function_A() 

編輯:

謝謝你,這個工程......我感謝所有的反饋,我是新手,請記住,這只是一個測試腳本我放在一起理解傳遞參數以不同的功能。在此之前,我正在使用全局變量,並試圖擺脫它們。

謝謝,任何建議是有幫助的。

bar = "bar" 
barnone = "barnone" 

def function_A(): 
    data = 5 
    data1 = 15 
    if host == 1: 
     work(data, data1) 
    else: 
     function_B() 

def function_B(): 
    data = 3 
    data1 = 13 
    work(data, data1) 
    test(data) 

def work(data,data1): 
    print data 
    print data1 
    test(data) 
    print test(data) 

def test(data): 
    if data == 3:foo = bar 
    elif data == 5:foo = barnone 
    return foo 

if __name__ == '__main__': 
    host = 11 
    function_A() 
+1

也許一個Python教程會爲你解決問題。你的代碼有很多問題,甚至很難描述它們。 https://docs.python.org/3/tutorial/ – wroniasty

回答

4

以下添加到您的test()函數的末尾:

`return foo` 

,那麼你可以打印變量work()這樣

print test(data) 
1

test功能應該這樣寫

def test(data): 
    if data == 3: 
     return 'bar' 
    elif data == 5: 
     return 'barnone' 

在調用test功能,分配結果

something = test(data) 

請注意,你的代碼有一些無關的問題,例如,如果data既不是3或5會發生什麼?

+0

OP顯然是一個非常新手的程序員。我沒有看到任何可能讓他現在混淆的風格建議,比如移動回報聲明。更容易指出他的代碼在'test'中是好的,最後只需要一個'return'。編輯:「罰款」在功能 – Anonymous

+0

@jphollowed由於這個原因,我沒有提到三元操作符。我相信在OP級別,完全控制路徑思想是必要的。 –

+0

我同意,我認爲在他擔心修改整個函數之前,在函數的底部放置一個「return」聲明並理解它的作用更有意義。這可能會更容易理解_precisely_區別在哪裏。 – Anonymous

2

foo僅在函數test()的「範圍」中定義,因爲那是您創建它的地方。函數work()不知道變量foo,因爲它是未定義的函數test()的外部。因此,test()回報變量foo稱爲test()的地方,這是work()test(data)

所以,是的,加return footest()的末尾。

編輯:

當你說test(data),這基本上是說sum([1,2,3])。你已經調用了一個函數,但你沒有對結果做任何事情,你不是它分配它。你必須說new_variable = test(data)。這意味着,從work()的角度來看:「調用函數test()並讓它做它的事情。我不在乎test()裏面發生了什麼,但我期待它在完成時向我吐出一些東西。我將在範圍內爲這個變量指定一個變量,以便我可以稍後使用它。「

這就像是說x = sum([1,2,3])sum是一個函數它在裏面做一些事情,你並不在乎什麼,你只是知道它應該返回一個合理的值,你將分配給x以後使用。

EDIT2:此外,因爲它的立場,test()會返回一個booleanfoo,因爲你使用==運營商,而不是賦值運算符=