为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 python变量(全局变量,局部变量,类变量,实例变量)

python变量(全局变量,局部变量,类变量,实例变量)

2016.11.19 12:07 36735浏览

一直对python的几个变量有点懵圈,这次好好总结一下,记录下来。

定义
  • 全局变量
    在模块内、在所有函数外面、在class外面,这就是全局变量
  • 局部变量
    在函数内、在class的方法内(未加self修饰),这就是局部变量
  • 静态变量
    在class内的,但不在class的方法内的,这就是静态变量
  • 实例变量
    在class的方法内的,用self修饰的变量,这就是实例变量
作用
全局变量

全局变量供全局共享,全局类和函数均可访问,达到同步作用。同时还可以被外部文件访问。

使用

全局变量使用的时候,需要用global显示声明。
一般情况下,如果函数直接调用全局变量,不做更新的话,一般没有问题,但如果有重新赋值,又没有在函数内部使用 global声明的话, 就相当于在内部创建了一个同名的局部变量,局部变量优先级要高于全局变量。

# coding:utf-8
_all = 'HelloWorld'    # 全局变量
_all_list = []    # 全局变量

def printall():
    global _all    # 这里需要用global显示声明
    print _all    # HelloWorld

错误:

# coding:utf-8
_all = 0    # 全局变量
_all_list = []    # 全局变量

def printall():
    # 这里不使用global显示声明
    # 更新一下_all,这里其实是printall的局部变量了
    _all = 3
    print _all

printall()     #  结果3
print _all    # 结果为0
局部变量

生命期间函数内

# coding:utf-8
def show():
    city = 'Beijing'    # 局部变量
    print city
静态变量

可以称为是类变量,通过类名可以直接访问,也可以通过实例名直接访问,此变量在类中全局共享,实例之间也是全局共享。可以看下面实例

# coding:utf-8
class foo:
    all = 0   
    def add(self):
        foo.q += 1

instance01 = foo()   # 实例化对象1
instance02= foo()    # 实例化对象2
print instance01.all    # 执行结果为:0
print instance02.all    # 执行结果为:0
print foo.all    # 执行结果为:0

instance01.add()
print instance01.all    # 执行结果为:1
print instance02.all    # 执行结果为:1
print foo.all    # 执行结果为:1

instance02.add()
print instance01.all    # 执行结果为:2
print instance02.all    # 执行结果为:2
print foo.all    # 执行结果为:2
实例变量

对于模块来说,有了自己的全局变量,可以供自己内部的类,函数使用,同步;对于函数或者类方法来说,有了自己的局部变量,供自己内部使用;对于类,有了静态变量,可以供内部和有继承关系的父子之际使用,同步;但实例之间各自的私有变量(局部变量)就要靠实例变量了,实现了动态绑定,多态特性。
用self来修饰

# coding:utf-8
class foo:
    all = 0
    def __init__(self, name):
        self.name = name
    def add(self):
        foo.q += 1

instance01 = foo('hello')
instance02 = foo('hi')
print instance01.name    # hello
print instance02.name    # hi
print foo.name     # AttributeError:class foo has no attribute 'name'
总结

在整个代码组织的过程中,一般会有这样两种基本需求,私有公有

私有

不与其他共享,自己独享,如函数和方法的局部变量,实例变量

公有

需要在一定范围内共享,达到同步目的,如模块内的代码共享的全局变量,类与子类之间共享的静态变量

点击查看更多内容

本文原创发布于慕课网 ,转载请注明出处,谢谢合作

9人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Python工程师
手记
粉丝
20
获赞与收藏
124

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

51篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

151篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消