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

时间:2016-04-29 07:25:08

标签: python python-3.x

我正在尝试从父函数将数据传递给子函数但我失败了,请帮助

>>> 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
>>> 

3 个答案:

答案 0 :(得分:3)

试试这个

def funa():
    a=10
    b=20
    funb(a,b)

def funb(a,b):
    c=a+b
    print(c)

答案 1 :(得分:1)

在他的回答中使用按价值传递方法作为Pavan。

或使用 global 变量方法:

>>> 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
>>> 

答案 2 :(得分:1)

在函数中定义变量时,它是函数的本地变量。这称为本地范围。有几种方法可以解决这个问题。您正在寻找的是全局范围,您可以在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)

为什么呢?因为现在funa()funb()可以在其他地方使用。我们甚至不必再将这些值称为ab。我现在可以使用来自其他函数的funb()中的善。如果我将funb()放入模块中,我甚至可以在其他程序中使用它。这意味着我们不必两次编写相同的代码(原理称为DRY - 不要重复自己)。如果您创建独立且独立的代码,则可以重用它。