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

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

一、前言:

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

二、基本概念:

全局变量:模块内、所有函数外、所有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关键字:

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

输出:

四大才子
员外

九、Python中的一切都是对象:

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

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

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

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

#############################################################################

鸣谢:特别感谢所有在CSDN等网站热爱技术、乐于分享的工程师们。

说明:本文只是个人学习之用。

#############################################################################

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值