Python之全局变量、局部变量、类变量、实例变量的解读

Python之全局变量、局部变量、类变量、实例变量的解读1 前言相信同学们一定懵逼过 那是 不懵逼就不正常了 现在由我为了大家在轻松的氛围下逐个说明标题中所述的 名词 2 定义 a 全局变量 在模块内 在所有函数外面 在 class 外面 这就是全局变量 b 局部变量 在函数内 在 class 的方法 构造 类方法 静态方法 实例方法 内 变量未加 self 修饰 这就是局部变量

前言

    全局变量、局部变量、类变量、实例变量,必须要分清

基本概念

全局变量:模块内、所有函数外、所有class外

局部变量:函数内、class的方法(类方法、静态方法、实例方法)内,且变量前面没有修饰

类变量:class内,不在class的任何方法内

实例变量:class的方法内,使用self修饰

【全局变量】与【局部变量】举例

ahead = 'HelloWorld' #ahead是全局变量 showList = [] #showList也是全局变量 def print_ahead(): print(ahead) #在该函数中没有称为ahead的局部变量,此处实际调用的是全局变量ahead def print_other(): city = 'beijing' #city是局部变量 print(city + ahead) #局部变量 与 全局变量 拼接 def print_list(): global showList #global关键字表示引用的是全局变量showList showList.append(1) showList.append(2) print(showList) print_ahead() print_other() print_list()

输出结果:

HelloWorld beijingHelloWorld [1, 2]

【类变量】与【实例变量】举例

class Person(object): TAG = "Person" #TAG是类变量 def __init__(self, name): #self表示当前实例对象 print(Person.TAG) #类变量TAG被访问 self.personName = name #personName是实例变量 def print_name(self): group = "BeiJing_" #group是局部变量 print(group + self.personName) # 局部变量 与 实例变量 拼接 if __name__ == "__main__": p = Person("WangYuanWai") p.print_name()

输出结果:

Person BeiJing_WangYuanWai

全局变量与局部变量同名

firstValue = "Hello World" def print_str(): firstValue = "hi man" print(firstValue) #注意:这里的firstValue调用的是局部变量firstValue,在方法中直接覆盖掉同名的全局变量firstValue

如果在print_str函数中没有使用global关键字显式引用全局变量,在print_str函数中将优先使用局部变量,而不是全局变量

省略global关键字

你的函数里只读取全局变量的值,此时可省略global,Python解释器明白你访问的是全局变量

first = 100 #first是全局变量 def my_hello(): print(first) #只是访问(读取)全局变量first的值,无需global修饰(加上global更规范)

不可省略global关键字

name = "王员外" def change_name(): global name name = name + "非常牛"

 上面的代码必须加上global修饰变量,说明先访问全局变量name的值,然后再相加,最后赋值全局变量,如果没有global修饰,Python解释器会无法找到name,因为此时Python解释器认为name为局部变量,应该先创建,一般会看到下午的Error,表示未创建局部变量

UnboundLocalError: local variable ‘name’ referenced before assignment

不可省略global关键字2

my_name = "员外" def baby(): my_name = "四大才子" print(my_name) #注意:此处访问的是局部变量my_name,全局变量my_name并没有改变 baby() print(my_name) 

输出:

四大才子 员外

Python中的一切都是对象

全局变量:属于模块对象的属性

类变量:属于类对象的属性

实例变量:属于实例对象的属性

局部变量:属于方法对象或函数对象的属性吗?不属于………函数对象或者方法对象必须显式的添加属性……

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202018.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:03
下一篇 2026年3月20日 上午8:04


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号