我试图将数据从父函数传递到子函数,但失败了,请帮助
>>> def funa():
a=10
b=20
funb()
>>> def funb():
c=a+b
print(c)
>>> funa()
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
funa()
File "<pyshell#27>", line 4, in funa
funb()
File "<pyshell#31>", line 2, in funb
c=a+b
NameError: name 'a' is not defined
>>>
试试这个
def funa():
a=10
b=20
funb(a,b)
def funb(a,b):
c=a+b
print(c)
当您在函数中定义变量时,它是函数的局部变量。这被称为局部作用域。有几种方法可以解决这个问题。您正在寻找的是全局范围,您可以在Python中这样做:
def funa():
global a
global b
a=10
b=20
funb()
呜呜!太乱了!是的,有充分的理由。这是一个糟糕的设计。一般来说,以这种方式使用全局变量是一种糟糕的做法,因为这两个函数现在不仅与它们自己联系在一起,而且与程序的其他部分联系在一起。好的设计是它们被封装,也就是说它们是独立的:
def funa():
a=10
b=20
funb(a, b)
def funb(a, b):
c=a+b
print(c)
为什么?因为现在CCD_ 1和CCD_。我们甚至不再需要将这些值称为a
和b
。我现在可以从其他函数中使用funb()
中的优度。如果我把funb()
放入一个模块中,我甚至可以在其他程序中使用它。这意味着我们不必写两次相同的代码(这个原则被称为DRY-don't Repeat Yourself)。如果你制作的代码是独立的,那么你就有更大的机会重用它
使用pass-by-value方法作为Pavan在其答案中给出的方法。
OR使用全局变量方法:
>>> a = 10
>>> b = 20
>>>
>>> def test():
... global a, b
... a = 1
... b = 2
... test1()
...
>>> def test1():
... print "a:", a, "tb:", b
...
>>> test()
a: 1 b: 2
>>>