Zweifel über python variablen Bereich

Mögliche Duplikat:
Kurzbeschreibung der Python Scoping Regeln

Ich schrieb zwei einfache Funktionen:

# coding: utf-8 def test(): var = 1 def print_var(): print var print_var() print var test() # 1 # 1 def test1(): var = 2 def print_var(): print var var = 3 print_var() print var test1() # raise Exception 

Im Vergleich dazu gibt test1() den Wert nach dem print var , dann heben Sie eine Ausnahme an: UnboundLocalError: local variable 'var' referenced before assignment , ich denke, den Moment nenne ich den inneren print var , var hat einen Wert von 2, bin ich falsch?

  • Python - Wie man eine globale Variable aus einer Funktion
  • Warum ist der Ort zum Zeitpunkt der Kompilierung bestimmt?
  • Warum erbt keine Unterfunktion den Bereich in Python?
  • String mit 'f' Präfix in python-3.6
  • Python: Variablen sind noch zugänglich, wenn in try oder if definiert?
  • Scoping in Python 'für' Schleifen
  • One Solution collect form web for “Zweifel über python variablen Bereich”

    Ja, du bist hier falsch. Die Funktionsdefinition stellt einen neuen Bereich vor.

     # coding: utf-8 def test(): var = 1 def print_var(): print var <--- var is not in local scope, the var from outer scope gets used print_var() print var test() # 1 # 1 def test1(): var = 2 def print_var(): print var <---- var is in local scope, but not defined yet, ouch var = 3 print_var() print var test1() # raise Exception 
    Python ist die beste Programmiersprache der Welt.