Dieses Skript definiert eine Variable in main()
, aber die Variable steht nicht zur Verfügung func()
, die in main()
ausgeführt wird. Warum das?Variable nicht verfügbar für Unterfunktion
#!/usr/bin/env python3
# vars_in_func.py
# Test script for variables within a function.
def func():
print(greeting)
def main():
greeting = "Hello world"
func()
main()
Fehler:
Traceback (most recent call last):
File "./vars_in_func.py", line 11, in <module>
main()
File "./vars_in_func.py", line 9, in main
func()
File "./vars_in_func.py", line 5, in func
print(greeting)
NameError: name 'greeting' is not defined
Wenn ich das Skript Python2 konvertieren, der Fehler ist das gleiche, außer es sagt global name
statt name
.
Ich nehme an, ich vermisse nur ein Schlüsselkonzept. Ich habe gerade angefangen, Python zu lernen, nachdem ich Bash gelernt habe.
Bearbeiten: Nachdem ich die Antworten gelesen hatte, erkannte ich meinen Fehler: Ich denke immer noch in Bash, wo Funktionen entweder in der gleichen Shell wie der Aufrufer (mit den gleichen Variablen) oder eine Unterschale von der Aufrufer (vererbte Variablen).
Lesen Sie über [Scope-Regeln] (http://stackoverflow.com/questions/291978/short-description-of-scoping-rules) – trincot
'func' läuft nicht innerhalb' main() '". Es wird nur von 'main' aufgerufen. Das bedeutet nicht, dass es lokale Variablen in 'main' sieht. – BrenBarn