下面的脚本运行正常,直到我添加“def test”,我试图摆脱一般的编程中的所有全局变量,因为我不是一个优秀的程序员,我希望有办法做这个。
我想将“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()
答案 0 :(得分:4)
将以下内容添加到test()
功能的末尾:
`return foo`
然后你就可以像这样在work()
打印变量
print test(data)
答案 1 :(得分:2)
foo
仅在函数test()
的“范围”中定义,因为这是您创建它的地方。函数work()
不知道变量foo
,因为它是函数test()
之外的 undefined 。因此,test()
必须将变量foo
返回调用 test()
的地方,即行test(data)
在work()
中。
所以,是的,将return foo
添加到test()
的末尾。
修改强>
当你说test(data)
时,基本上是在说sum([1,2,3])
。你已经调用了一个函数,但是你没有对结果做任何事情,你不是分配它。你必须说new_variable = test(data)
。这意味着,从work()
的角度来看:“调用函数test()
并让它做它的事情。我不关心test()
内部发生了什么,但我期待当它完成时我会向我吐出一些东西。我会把这些东西分配给我的范围内的一个变量,以便我以后可以使用它。“
就像说x = sum([1,2,3])
一样。 sum
是一个函数,它在其中执行某些操作,您并不真正关心什么,您只知道它应该返回一个合理的值,您将分配给x
以后再用
Edit2:此外,由于您使用test()
运算符,boolean
将为foo
返回==
。而不是赋值运算符=
。
答案 2 :(得分:1)
您的test
函数应该写成
def test(data):
if data == 3:
return 'bar'
elif data == 5:
return 'barnone'
在调用test
的函数中,分配结果
something = test(data)
请注意,您的代码存在一些无关的问题,例如,如果data
既不是3也不是5,会发生什么?