- 变量
- 常量
-曾老湿, 江湖人称曾老大。
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
变量
变量介绍 |
---|
1.什么是变量? 变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态。
量:是记录现实世界当中的某种状态 变:指的是记录的状态是可以发生变化的
2.为什么要用变量? 程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
是为了让计算机能够像人一样去将一个事物的状态记忆下来(存到计算机内)
存
,永远不是目的,目的是为了,取
,计算机以后在使用的时候,可以取出来。
例如: 在游戏中,英雄的等级为1,打怪升级(变)10级 游戏中人物名字:Driver_Zeng,使用了改名卡,变为:曾老湿 植物大战僵尸:僵尸的存活状态为True,被植物打死了,变为False
3.如何使用变量?
代码语言:javascript复制name=zls
age=18
print(age)


定义变量的语法(分三部分): 1)变量名 相当于一个门牌号,便于取出变量值,是访问到值的唯一方式
2)赋值符号 将值的内存地址,绑定给变量名
3)变量值 用来表示状态
变量的使用规则:先定义,在通过变量名去引用。
变量名定义规范 |
---|
变量名的命名规则: 1.大前提:变量名的命名应该能够反映出值记录的状态。 2.变量是用来访问变量值的,所以变量名应该遵循一定规范,来方便我们标识存到内存中值的功能。
代码语言:javascript复制1.变量名只能是 字母、数字或下划线的任意组合(区分大小写)
例如:
x=1
X=2
是两个变量
2.变量名的第一个字符不能是数字
例如:
1x=1
123_x=1
3.关键字不能声明为变量名
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
例如:
print=123
这样python内置功能print就无法使用了
变量名定义方式 |
---|
1.下划线(纯小写)
代码语言:javascript复制age_of_oldboy=73 #python推荐使用
2.驼峰体
代码语言:javascript复制AgeOfOldboy=73
3.不好的方式
1)变量名为中文、拼音 2)变量名过长 3)变量名词不达意
变量值特征 |
---|
每定义一个变量,对于变量值,都具备3个特征。
1.id
反映在内存中的位置。 如果id相同,name这两个变量我们认为,是同一个变量。 类似于身份证号。
代码语言:javascript复制age=18
nam='zls'
print(id(name))
print(id(age))


2.type(类型) 不同类型的值,是用来表示、记录不同的状态
代码语言:javascript复制#整型
age=18
#字符串
nam='zls'
print(type(name))
print(type(age))


3.value(值) 我们存放在内存中的数据,用来表示某种状态
代码语言:javascript复制name='zls'
age=18
print(name)
print(age)


小整数池 |
---|
#设置变量
x=100
y=20
#查看id
print(id(x))
print(id(y))
#当我们设置两个变量时,他们的内存地址是不一样的
4304954848
4304952288

代码语言:javascript复制#设置变量
x=100
y=100
按照我们的理解,当设置这两个变量时,内存中发生了以下变化。
首先,开辟一块x
的内存空间,value
为100
其次,开辟一块y
的内存空间,value
为100

但是实际上:
代码语言:javascript复制#设置变量
x=100
y=100
#查看id
print(id(x))
print(id(y))
#他们的id是相同的
4304954848
4304954848

Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256]
,该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被GC回收。
每创建一个-5到256之间的整数,都是直接从这个池里直接拿走一个值,例如:
代码语言:javascript复制[root@elkstack01 ~]# python3
Python 3.6.4 (default, Apr 8 2019, 17:12:35)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a=257
>>> b=257
>>>
>>> print(id(a))
140410179172240
>>> print(id(b))
140410179172880
>>> m=256
>>> n=256
>>>
>>> id(m)
9096160
>>> id(n)
9096160

因为超过了[-5,256]
范围,所以需要重新开辟新的内存空间,因此,他们的id是不一样的。

但在pycharm中运行python程序,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究。
代码语言:javascript复制x=122222222222222111
y=122222222222222111
print(id(x))
print(id(y))

Python的垃圾回收机制 |
---|
Python解释器会定期回收,那些没有绑定变量名的值。
代码语言:javascript复制age=18
x=age

此时不应被回收。
代码语言:javascript复制age=18
x=age
age=19
del x

此时,18已经没有所谓的门牌号
,那么Python解释器会自动将垃圾回收。
常量
常量
就是不变的量.
Python中的chang'l |
---|
age_of_oldboy = 73
常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量 举例,假如老男孩老师的年龄会变,那这就是个变量,但在一些情况下,他的年龄不会变了,那就是常量。在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量
代码语言:javascript复制AGE_OF_OLDBOY = 73
ps:在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错