Python:子函数无法访问父函数数据



我试图将数据从父函数传递到子函数,但失败了,请帮助

>>> 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_。我们甚至不再需要将这些值称为ab。我现在可以从其他函数中使用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
>>> 

最新更新