我知道之前已经解释过这个问题,但我仍然无法弄清楚我的情况,我解释的很简单:
def func1 ():
a = 1
b = 2
print a + b
def func2 ():
c = 3
d = 4
e = a * c
f = b + d
func1()
func2()
当这样跑:
$ ./test1.py
3
Traceback (most recent call last):
File "./test1.py", line 18, in <module>
func2()
File "./test1.py", line 14, in func2
e = a * c
NameError: global name 'a' is not defined
简单的问题是,如何更改上面的代码,以便func2存储来自func1的变量?
答案 0 :(得分:5)
我不会像其他答案中提到的那样将变量设为全局变量,而是将其返回func1
并在func2
中使用它们。
def func1():
a = 1
b = 2
print a + b
return a, b
def func2(a, b):
c = 3
d = 4
e = a * c
f = b + d
func2(*func1())
当我们在func1()
中返回多个变量时,这些变量将作为元组(a, b)
出现。
我们必须将它们解包成2个变量,而不是将它作为单个变量传递给func2
。
以下是*args
**kwargs
主题的优秀question and answer。
答案 1 :(得分:3)
执行此操作的正确方法是使用return
和参数。
def func1 ():
a = 1
b = 2
return a,b
def func2 (a, b):
c = 3
d = 4
e = a * c
f = b + d
a, b = func1()
print(a, b)
func2(a, b)
结果:
>>> a, b = func1()
>>> print(a, b)
1 2
>>> func2(a, b)
答案 2 :(得分:0)
a = 1
b = 2
def func1 ():
print a + b
def func2 ():
c = 3
d = 4
e = a * c
f = b + d
func1()
func2()
答案 3 :(得分:0)
刚刚将变量设为全局变量(没有这个,a和b只是局部变量):
def func1 ():
global a, b
a = 1
b = 2
print a + b
def func2 ():
c = 3
d = 4
e = a * c
f = b + d
func1()
func2()
但最好避免这种解决方案