如何在Python中定义变量
2023-03-20 15:25:53 时间
我们首先看一下变量的分类,通常情况下,我们所说到的定义一个变量,如果没有特殊说明,那么就是定义一个全局变量。
全局变量
在模块内、在所有函数外面、在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 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'
总结
在整个代码组织的过程中,一般会有这样两种基本需求,私有 和 公有。
私有
不与其他共享,自己独享,如函数和方法的局部变量,实例变量
公有
需要在一定范围内共享,达到同步目的,如模块内的代码共享的全局变量,类与子类之间共享的静态变量。
更多学习内容,请点击Python学习网。
相关文章
- Python中的函数与方法 以及Bound Method和Unbound Method
- 一文贯通python文件读取
- Python 中的异步编程:Asyncio
- 7个你现在就该学习Python的理由
- 提高Python运行效率的六个窍门
- Python数据科学:神经网络
- 一篇文章看懂大数据分析就业前景及职能定位
- R和Python中的文本挖掘:8个入门小贴士
- 告诉你为什么Python有点慢,但我却无所谓?
- 专注学习DevOps编程语言Top 5推荐
- Python发送邮件脚本
- Python多进程并行编程实践: mpi4py 的使用
- Python语言在未来的发展前景
- Python vs Ruby: 谁是最好的 web 开发语言?
- Python对Ruby:谁在Web开发领域更胜一筹?
- Python一行代码完成并行任务
- Python开发者2017应该关注的七个类库
- python爬虫入门基本知识
- 在终端中优雅地编写Python
- Python机器学习实战:信用卡欺诈检测