Этот скрипт определяет переменную внутри main()
, но переменная недоступна func()
, которая проходит внутри main()
. Почему это?Переменная недоступна для подфункции
#!/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()
Ошибка:
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
Если преобразовать сценарий python2, ошибка такая же, за исключением того, что говорит global name
вместо name
.
Я предполагаю, что у меня просто отсутствует ключевое понятие. Я только начал изучать Python после изучения Bash.
Редактировать: После прочтения ответов, я понял свою ошибку: я все еще думать в терминах Bash, где функция либо выполняться в той же оболочке, что и вызывающий (с тем же переменным), или подоболочками вызывающий (унаследованные переменные).
Подробнее о [scope rules] (http://stackoverflow.com/questions/291978/short-description-of-scoping-rules) – trincot
'func' не запускается внутри' main() '. Это просто называется 'main'. Это не значит, что он видит локальные переменные в 'main'. – BrenBarn