python 学习笔记-变量作用域
来源:互联网 发布:ubuntu samba 权限 编辑:程序博客网 时间:2024/05/20 22:03
全局变量:在模块内、在所有函数外面、在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 _allprintall() # 结果3print _all # 结果为0
局部变量
生命期间函数内
# coding:utf-8def show(): city = 'Beijing' # 局部变量 print city
静态变量
可以称为类变量,通过类名可以直接访问,也可通过实例名直接访问,此变量在类中全局共享,实例之间也是全局共享。
# coding:utf-8class foo: all = 0 def add(self): foo.q += 1instance01 = foo() # 实例化对象1instance02= foo() # 实例化对象2print instance01.all # 执行结果为:0print instance02.all # 执行结果为:0print foo.all # 执行结果为:0instance01.add()print instance01.all # 执行结果为:1print instance02.all # 执行结果为:1print foo.all # 执行结果为:1instance02.add()print instance01.all # 执行结果为:2print instance02.all # 执行结果为:2print foo.all # 执行结果为:2
实例变量
对于模块来说,有了自己的全局变量,可以供自己内部的类,函数使用,同步;对于函数或者类方法来说,有了自己的局部变量,供自己内部使用;对于类,有了静态变量,可以供内部和有继承关系的父子之际使用,同步;但实例之间各自的私有变量(局部变量)就要靠实例变量了,实现了动态绑定,多态特性。
用self来修饰
# coding:utf-8class foo: all = 0 def __init__(self, name): self.name = name def add(self): foo.q += 1instance01 = foo('hello')instance02 = foo('hi')print instance01.name # helloprint instance02.name # hiprint foo.name # AttributeError:class foo has no attribute 'name'
总结
在整个代码组织的过程中,一般会有这样两种基本需求,私有和公有。
私有
不与其他共享,自己独享,如函数和方法的局部变量,实例变量
公有
需要在一定范围内共享,达到同步目的,如模块内的代码共享的全局变量,类与子类之间共享的静态变量
0 0
- python 学习笔记-变量作用域
- Python学习笔记-1(变量、类型、函数、类、作用域)
- Python学习笔记:作用域
- JavaScript学习笔记九:变量作用域
- js学习笔记-变量作用域
- python学习笔记11(函数二): 参数的传递、变量的作用域
- python 变量作用域
- python 变量作用域
- python变量作用域
- python 变量作用域
- python 变量作用域
- python变量作用域
- python 变量作用域
- python变量作用域
- 【Python】变量作用域
- python 变量作用域
- python 变量作用域
- Python变量作用域
- java-匿名内部类
- to do list
- 足以应付一切的水仙花数,字母交叉问题,数组排序去重复,今天get到一点点,首先一道题莫名其妙地改对了然后明白了自己思路是对的但是不会写代码 还是什么用都没有
- jQuery on: losing attached event after rendering partially by AJAX call
- 第27天 批处理、对象的克隆、内存溢出、设计模式、反射
- python 学习笔记-变量作用域
- mysql命令
- Java并发之基本的线程机制
- 关于android内存优化的几点建议
- python学习笔记-1:pycharm安装以及编写显示“Hello python”
- QT tcp粘包问题
- 大学只待成追忆,只是工作已半年,2016再见
- mysql 行级锁的使用以及死锁的预防
- 电感啸叫和LDO啸叫