2017-09-26 5 views
-2

Meine Funktionen in Python geben keine Werte zurück, die ich von ihnen erwarte. Hier ist ein MWE:Funktionen werden nicht ausgeführt

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c 

random_function(c) 
print(c) 

Ich erwarte, dass diese Funktion 3 drucken, sondern druckt es 0. Ich habe gerade 2,7-3,6 aktualisiert und dies würde in 2.7 gearbeitet haben - was mache ich falsch?

+4

Sie haben zwei völlig getrennte Variablen ändern - die lokalen Variable (eigentlich ein Parameter) innerhalb von 'random_function()' und die globale Variable mit dem gleichen Namen. Es besteht ABSOLUT KEINE VERBINDUNG zwischen den beiden - das globale "c" zu übergeben, da der Wert für den Parameter "c" keine solche Verbindung erzeugt. – jasonharper

+1

Das hätte in Python 2 genauso funktioniert **, obwohl Ihre 'random_function' aufgrund des Unterschieds im Operator'/'etwas anderes zurückgegeben hätte, aber' print (c) '' '0 'in beiden. –

+0

Deklarieren Sie "c" als global mit einer 'global c'-Anweisung am Anfang der Funktion. Variablen, die in Funktionen erstellt werden, sind standardmäßig lokal. Eine bessere Alternative wäre, den Rückgabewert explizit der äußeren 'c'-Variablen zuzuordnen. – martineau

Antwort

3

Need von Methode zurückgegebenen Wert zu speichern.

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c 

c= random_function(c) 
print(c) 
+0

Aber erklären Sie, warum der Bereich für seine nicht funktioniert. – ifconfig

+2

'Need to ...' zuweisen ... – wwii

+1

Sie wahrscheinlich einen anderen Namen den Rückgabewert zuweisen wählen sollte - so die ursprüngliche 'c' * nicht verschwindet *. – wwii

2

Wie @Dharmesh gesagt, müssen Sie den Wert von c speichern, wenn es aus random_function() kommt.

heißtc = random_function(c)

Der Grund:

Scope ist alles. Wenn Sie innerhalb der Funktion den Wert c ändern, wirkt sich dies nur auf den Wert c im Rahmen dieser Funktion aus und ändert seinen Wert im globalen Kontext nicht.

Damit der Wert, den Sie innerhalb der Funktion von c erhalten haben, beibehalten werden soll, müssen Sie den von der Funktion zurückgegebenen Wert c zuweisen.

0

Sie c Wert drucken, die global zugewiesen wurde.

a = 6 
b = 18 
c = 0 
def random_function(c): 
    c = b/a 
    return c # -- this variable scope is local 

random_function(c) 
print(c)  #-- prints Global variable 

wie erwartet zu drucken, müssen Sie Ihren Funktionsaufruf wie unten

'c' hier genannt
print (random_function(c)) 

oder

c = random_function(c) # this will re assign global value of 'c' with function return value 
print(c) 
Verwandte Themen