2016-04-11 12 views
-1

Okay, das ist der Code im Test und es funktioniert einfach nicht. Python sagt, dass mein x nicht definiert ist, obwohl mein set_x x auf einen Wert setzen sollte. Was vermisse ich?Definieren einer Funktion vor Strings

def hi(): 
    print(x) 

def set_x1(): 
    x = "hello" 
    hi() 

def set_x2(): 
    x = "world" 
    hi() 

set_x1() 
set_x2() 
+0

Es gibt zwei 'x', beide lokal zu zwei Funktionen. Sie müssen eine 'x' Variable außerhalb von' hi() 'deklarieren oder einen Parameter übergeben. – Biffen

+0

http://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules –

Antwort

1

Näher an Ihrem ursprünglichen Code, geben Sie einfach die Variable:

def hi(x): 
    print(x) 

def set_x1(): 
    x = "hello" 
    hi(x) 

def set_x2(): 
    x = "world" 
    hi(x) 

set_x1() 
set_x2() 

Es ist alles mit hallo Funktion nicht in der Lage zu tun, was in anderen Funktionen innerhalb des x-Variable ist, die wir als lokal kennen Variable. Hier ist ein guter Vortrag, der Ihnen sagt, was hinter dem Code vor sich geht: https://www.youtube.com/watch?v=_AEJHKGk9ns

0

Sie sollten x nicht in einem local scope setzen. Sie könnten einen Wert zurückgeben statt (und setzen vielleicht x auf diesen Wert):

def hi(x_arg): 
    print(x_arg) 

def x1(): 
    return "hello" 

def x2(): 
    return "world" 

x = x1() 
hi(x) 
x = x2() 
hi(x) 

In Ihrem ursprünglichen Code wird x nicht mehr definiert, wenn die Funktion beendet. Seit es ist lokal zum Umfang der Funktion.

Eine andere Möglichkeit für eine Funktion, die "äußere Welt" zu beeinflussen, wäre ein mutierbares Objekt zu mutieren, aber das ist außerhalb unserer Reichweite (siehe was ich dort gemacht habe :-) ...).

Verwandte Themen