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

2024-09-28 22:01:43 发布

您现在位置: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
>>> 

Tags: 数据函数inmostdeflinecallfile
3条回答

在函数中定义变量时,它是函数的局部变量。这称为局部范围。有几种方法可以解决这个问题。您需要的是全局范围,您可以在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-不要重复自己)。如果你的代码是独立的,那么你有更大的机会可以重用它。你知道吗

试试这个

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

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

使用帕万在回答中给出的传递值方法。你知道吗

或使用变量方法:

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

相关问题 更多 >