2017-04-19 3 views
2

Ich habe eine einfache Funktion auf Python erstellt und einige Tests mit dem Debugger zu sehen, wie es funktioniert.Werte Argumente in pdg

Ich wollte den Wert einer Variablen (raiz) drucken:

(dbg) p raiz 

Aber es sagt, dass es nicht definiert ist. Warum ist das? Hier ist mein Code:

Antwort

0

Dies ist mit Scope.

Der Ort, zu tun, die Variablen definiert werden, ist wichtig, und sie an bestimmten Stellen definieren, will sie an anderer Stelle verschwinden. Hier ein Beispiel:

# PLEASE NOTE: This code will fail. 
a = "Hello" 

def my_func(): 
    b = "Hello" # Declare a variable 'b', but only in this scope, in other words this function. 

my_func() 

print(a) # Works, since a is in the same scope. 
print(b) # Fails, since b was defined inside a different scope, and discarded later. 

Da in Ihrem Beispiel raiz innerhalb der Funktion funcion erklärt wurde, Python sie verworfen, nachdem funcion genannt wurde. Wenn Sie die Zeile setzen:

raiz = 0 

vor Ihrer Funktionsdefinition würde die Funktion einfach die Variable aktualisieren, so gäbe es kein Problem sein, da der Umfang der gleiche wie sein würde, wo die print Anweisung auftritt.

tl; dr: Die Variable raiz wurde nur in funcion deklariert, daher wurde sie danach verworfen.

1

Ihre Variable wird innerhalb der Funktion deklariert, nicht außerhalb, so dass der Code es nicht sehen kann.

Wenn Sie Wert für außerhalb Variable zu setzen, markieren Sie es mit global Schlüsselwort (das ist eine schlechte Praxis):

import math 

raiz = None 

def funcion(sen): 
    nonlocal raiz 
    raiz = math.sqrt(sen) 
    return "the sqrt of " + repr(sen) + 'is ' + repr(raiz) 

funcion(38) 
print (raiz) 

Sie können auch nonlocal Schlüsselwort verwenden, aber für diesen Fall wäre es nicht mit:

SyntaxError: no binding for nonlocal 'raiz' found 

Sie können ein Tutorial über die lokale, nicht-lokale und globale Schlüsselwörter here finden.