🎋Python 全局变量 局部变量 作用域 说明
2023-9-25
| 2023-9-25
0  |  0 分钟
type
status
date
Sep 25, 2023 02:38 AM
slug
summary
tags
category
icon
password

总结

 

全局变量 global

## 哪些是全局变量

函数外声明的都是全局变量.
  1. 包括 if name == “main”:下的.
  1. 包括py 文件最上面,没有在函数内的变量.
 

## 全局变量的读写规则

1. 在函数外可以直接读写
  1. 在函数内,可以直接读
  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中,ifwhilefor等控制结构不引入新的作用域。这与某些其他编程语言(如C或Java)不同,这些语言中的大括号{}定义了新的局部作用域。
以下是一个简单的例子:
在这个例子中,some_varmain_var都是全局变量,可以在其定义之后的整个脚本中访问,包括任何函数或方法,除非它们被局部变量覆盖。
但需要注意的是,如果你在一个函数内部尝试修改全局变量,你需要使用global关键字。否则,Python会在函数内部创建一个同名的局部变量。
总结一下,在if __name__ == "__main__":块内声明的变量实际上是全局变量,可以在整个脚本或模块中访问。这一点基于Python的作用域规则,即if语句不创建新的局部作用域。
技术折腾
  • Python
  • chatGPT 用量检测脚本花两周基本完成上线学习 logging 模块 chatGPT 问答
    目录