type
status
date
Sep 25, 2023 02:38 AM
slug
summary
tags
category
icon
password
总结
全局变量 global
## 哪些是全局变量
函数外声明的都是全局变量.
- 包括
if
name
== “
main
”:
下的.
- 包括py 文件最上面,没有在函数内的变量.
## 全局变量的读写规则
1. 在函数外可以直接读写
- 在函数内,可以直接读
- 在函数内, 要写的话,要在函数内先用 global 声明.
Python 全局变量与 global 关键字
在 Python 的变量使用中,经常会遇到这样的错误:
它的意思是:局部变量 “a” 在赋值前就被引用了。
比如运行下面的代码就会出现这样的问题:
但是如果把 a = a + 1 这一句删除又不会出现上述问题了
原来,在 Python 中,a=3 定义了全局变量 a,作用域从定义处到代码结束,在 a=3 以下的函数中是可以引用全局变量 a 的,但如果要修改函数中与全局变量同名的变量,则函数中的该变量就会变成局部变量,在修改之前对该变量的引用自然会出现未分配或未定义的错误了。
如果确定要引用并修改全局变量必须加上 global 关键字
注意要领:哪个函数需要修改全局变量,在函数中声明一下即可。
但在 if name == “main”:下,全局变量是一直保持的, 也是全局变量. 功能和函数外声明的一样.
输出如下(Python3 环境下):
局部变量作用域 vs if __name__ == "__main__"
在Python脚本中,
if __name__ == "__main__":
是一个常用的模式,用于确定脚本是作为主程序运行还是被导入为模块。在这个if
语句块中定义的变量,虽然看似在这个块的局部作用域内,实际上它们是全局作用域(脚本级别)内的变量。这是因为在Python中,
if
、while
for
等控制结构不引入新的作用域。这与某些其他编程语言(如C或Java)不同,这些语言中的大括号{}
定义了新的局部作用域。以下是一个简单的例子:
在这个例子中,
some_var
和main_var
都是全局变量,可以在其定义之后的整个脚本中访问,包括任何函数或方法,除非它们被局部变量覆盖。但需要注意的是,如果你在一个函数内部尝试修改全局变量,你需要使用
global
关键字。否则,Python会在函数内部创建一个同名的局部变量。总结一下,在
if __name__ == "__main__":
块内声明的变量实际上是全局变量,可以在整个脚本或模块中访问。这一点基于Python的作用域规则,即if
语句不创建新的局部作用域。