变量不可用于子函数

wja*_*rea 0 python variables function

该脚本在 内部定义了一个变量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()
Run Code Online (Sandbox Code Playgroud)

错误:

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
Run Code Online (Sandbox Code Playgroud)

如果我将脚本转换为 Python2,错误是相同的,只是它显示的global name是而不是name.

我想我只是错过了一个关键概念。我是在学习 Bash 之后才开始学习 Python 的。

编辑:阅读完答案后,我意识到我的错误:我仍然在考虑 Bash,其中函数要么在与调用者相同的 shell 中运行(具有相同的变量),要么在调用者的子 shell 中运行(继承变量) 。

apa*_*niv 5

greeting = None

def func():
    print(greeting)

def main():
   global greeting
   greeting = "Hello world"
   func()

main()
Run Code Online (Sandbox Code Playgroud)

在您的解决方案中,主函数中定义的问候语是局部变量,无法在主函数之外访问。这就是它给你错误的原因