该脚本定义了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
。
我假设我只是缺少一个关键概念。在学习Bash之后,我开始学习Python。
编辑:在阅读答案后,我意识到自己的错误:我仍然用Bash的方式来思考,其中函数或者在调用方的相同shell中运行(具有相同变量),或者调用者(继承变量)。
阅读[范围规则](http://stackoverflow.com/questions/291978/short-description-of-scoping-rules) – trincot
'func'不会在main()''里面运行。它只是由'main'调用。这并不意味着它会在'main'中看到局部变量。 – BrenBarn