2016-11-08 4 views
1

Wenn ich diesen Code ausführen auf Python 3.5 ichPython spielte Ausdruck in Funktion nicht funktioniert

Nameerror name ‚md‘ ist nicht definiert.

Ich habe einen markierten Ausdruck für MD verwendet, so dass es alle der mittleren Werte greifen wird. Da es nicht funktioniert hat, habe ich versucht, einen markierten Ausdruck im Code über der Funktion (drop_first_last) zu verwenden, und dieser markierte Ausdruck funktionierte gut.

t = [3, 5, 6,8, 2, 9] 
first, *middle, last = t 
avgg = np.mean(middle) 
print('middle is:', middle) 
print('avg is:', avgg) 
def drop_first_last(t): 
    frst, *md, lst = t 
    return np.mean(md) 

drop_first_last(t) 
print("avg",md) 
+2

'md' ist *** lokal *** innerhalb der 'drop_first_last'-Funktion definiert und kann nicht außerhalb der Funktion aufgerufen werden, es sei denn, Sie _globalize_ es. Ich empfehle letzteres überhaupt nicht. – Abdou

+0

Beachten Sie, dass es funktionieren wird, wenn Sie den 'print (" avg ", md)' -Aufruf innerhalb der Definition 'drop_first_last()' setzen (nachdem 'md' definiert wurde). Das Problem, wie @Abdou sagte, ist, dass 'md' nur innerhalb der Funktion verfügbar ist, nicht nach der Rückkehr. – dimo414

+0

Also, nur um sicher zu sein, ich verstehe, dann würden Sie normalerweise einen Druckwert innerhalb der Funktion (?) Verwenden oder eine return-Anweisung verwenden, um die Werte aus der Funktion zu erhalten? –

Antwort

1

Der Umfang der md wird auf den Namespace innerhalb der drop_first_last Funktion beschränkt und nicht außerhalb desselben zugegriffen werden kann, es sei denn, Sie globalisierenden es in Betracht ziehen. Abgesehen davon, es scheint mir nicht, dass Sie auf print die Liste md selbst suchen. Ich denke, Sie versuchen, den Durchschnitt der Elemente der Liste zu drucken. Anstatt also:

drop_first_last(t) 
print("avg is: ",md) 

tun:

print("avg is: ",drop_first_last(t)) 

Aber wenn Sie wirklich werden nach den md Variable innerhalb der Funktion drop_first_last definiert ist, dann können Sie Ihre Funktion neu zu definieren, wie folgt:

def drop_first_last(t): 
    global md 
    frst, *md, lst = t 
    return np.mean(md) 

Mit der so definierten Funktion können Sie nun auf die md Variable zugreifen e (das ist eine list).

t = [3, 5, 6, 8, 2, 9] 
print(drop_first_last(t)) 
print(md) 

ergibt:

#5.25 
#[5, 6, 8, 2] 

Ich hoffe, das hilft.

+0

Große Antwort, außer du hast 'global' eingeführt, was fast immer das Falsche in Python ist. Wenn Sie zwei Ergebnisse von einer Funktion haben möchten, können Sie sie haben. Ich würde lieber 'return (md, np.mean (md))' sehen – msw

Verwandte Themen