Warum nicht eine sub-Funktion, Erben Umfang in Python?

Ich verstehe nicht, warum Folgendes nicht funktioniert:

def foo( x ):
    n = 1
    summe = 0
    def bar():
        n -= 1
    for i in range(0,10):
        y = x+i+n
        x += i
        summe += y
        print "{0} = {1} + {2} + {3}".format(y,x,i,n)
        bar()
    print "summe =", summe
    return summe

Warum ist es, dass bar() Erben nicht den Umfang der foo()? Ist das ein C'ism, dass ich vergessen muss? Gibt es eine Möglichkeit, ich kann machen, dass die Arbeit?

  • Welche version von Python benutzt du?
  • Version 2.6.6. Ist dies behandelt in einer neueren version?
  • Es kann nicht sein, eine C-ism - in C eine Funktion nicht haben "innere Funktionen".
  • BTW, ich hoffe, es ist nur ein Beispiel. Es ist völlig sinnlos diese Funktion zu nutzen, anstatt nur das zu tun n -= 1 wo es gebraucht wird...
  • Das ist nicht wahr. Dieser code gültig ist (stellen Sie sicher, dass Sie in #include <stdio.h> oben): int main() { char test_me[] = "this is a test\n"; void my_print(){ printf(test_me);} my_print(); return 0; } GCC gibt eine Warnung über es, aber es funktioniert.
  • Und auch das war nicht wirklich der Punkt hier. Dies ist eine eher gekünstelt Beispiel Fragen zu Umfang.
  • Hier es wird beschrieben, wie ein GCC-Erweiterung. In Standard-C ist es nicht gültig.
  • Yup, ich muss zugeben, dass Sie korrekt sind. Ich entschuldige mich. Ich denke, ich hatte nur GCC zu lange-nicht, dass ich habe müssen für verschachtelte Funktionen in C, aber ich wusste, dass Sie möglich mit dem GCC.

InformationsquelleAutor supercheetah | 2011-04-24
Schreibe einen Kommentar