Python 变量管理

写在前边

最近频繁遇到变量赋值问题,这里整理下。请大家不吝赐教。

变量分类

变量类型

定义

变量作用域

存活时间

说明

局部变量

在函数内部定义,只能在此变量被声明的函数内访问

局部作用域:在被调用函数内赋值的变元和变量

函数调用至函数返回

局部作用域声明 或 修改全局变量 global

内层函数修改外层变量 nonlocal,同时,nonlocal 不能定义,不能修改全局变量

全局变量

在函数外定义,可以在函数内外被访问

全局作用域:在所有函数之外赋值的变量

 定义全局变量用 global 
-----------下边是涉及到类的----------------
类变量在类下定义,这里类似java的static,所有实例之间共享数据,归属于一个类可以用类调用,可以用实例对象调用 可变变量时(如列表、字典、自定义类)传引用,不可变变量时(如int、string)传值
对象变量、实例变量、成员变量在类的构造函数(__init__)内以self.开头来定义,特定于每个实例的数据,不与类其他实例共享,每个实例变量正对特定实例单独存储一份  类变量可以被同名的实例变量”遮盖“
局部变量self.给出,不在构造函数中进行初始化   

区分一个变量是否处于局部作用域

  1. 如果变量在全局作用域中使用,它就总是全局变量
  2. 如果在一个函数中,有针对性该变量的global语句,它就是全局变量
  3. 否则,如果该变量用于函数中的赋值语句中,它就是局部变量
  4. 但是,如果该变量没有用在赋值语句中,它就是全局变量

Python查找变量的顺序

Python查找变量时,会按照 局部命名空间(如果存在嵌套就逐层向外)、全局命名空间、内置命名空间的顺序来。

在未赋值前引用,会报 "local variable 'xxx' referenced before assignment"

找不到,会报 "name 'xxx' is not defined"

其他要注意的点

  • 数字 字符串 元组 修改全局变量时需要加global,列表和字典则不需要。

  • 其实局部变量是有层次的,如果出现函数的嵌套,内层函数想调用外层的变量是,是不能用global声明的,因为外层的变量不叫全局变量。这时候如果想修改外层的变量,就得用到一个新的关键字:nonlocal

参考

https://blog.csdn.net/qq_44198436/article/details/100051651

https://blog.csdn.net/xuzhexing/article/details/93915962

https://blog.csdn.net/qw_sunny/article/details/80972357

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值