2016-08-12 65 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,因为你使用==运营商,而不是赋值运算符=