2016-04-29 5 views
0

Ich versuche, Daten auf das Kind Funktion von übergeordneten Funktion zu übergeben, aber ich bin Fehler, bitte helfenPython: Kind-Funktion nicht in der Lage den Zugriff auf Daten übergeordnete Funktion

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

in der Funktion ** funcb ** definieren a und b Variablen – Pavan

+0

'a' und 'b' sind lokale Variable der Funktion 'funa'. Sie können nicht in anderer Funktion zugreifen. –

+0

'a' und' b' sind nicht global – co2y

Antwort

3

Versuchen Sie, diese

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

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

Gute Idee, danke Pavan –

1

Verwenden pass nach Wert Methode wie Pavan in seiner Antwort gegeben.

OR Verwenden global variable Methode:

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

Sieht gut aus, lass mich das auch versuchen –

1

Wenn Sie eine Variable in einer Funktion definieren, dann ist es für die Funktion lokal. Dies ist bekannt als lokalen Bereich. Es gibt verschiedene Möglichkeiten. Was Sie suchen ist globalen Bereich, und Sie können es in Python wie folgt tun:

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

Puh! Das ist unordentlich! Ja, und aus gutem Grund. Dies ist ein schlechtes Design. Im Allgemeinen ist es eine schlechte Übung, globale Variablen auf diese Weise zu verwenden, weil die beiden Funktionen nun miteinander verbunden sind, nicht nur mit sich selbst, sondern mit dem Rest des Programms. Gutes Design ist, dass sie eingekapselt sind, das heißt, sie sind unabhängig:

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

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

Warum? Denn jetzt funa() und funb() kann an anderer Stelle verwendet werden. Wir müssen diese Werte nicht einmal mehr a und b aufrufen. Ich kann jetzt die Güte nutzen, die in funb() von anderen Funktionen ist. Wenn ich funb() in ein Modul setze, kann ich es sogar in anderen Programmen auch verwenden. Das bedeutet, dass wir nicht denselben Code zweimal schreiben müssen (das Prinzip heißt DRY - Do not Repeat Yourself). Wenn Sie Code erstellen, der eigenständig und unabhängig ist, besteht eine größere Chance, dass Sie ihn wiederverwenden können.

Verwandte Themen