程序=数据+功能
1、变量
定义:变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态。
原则:先定义后使用
变量名:用来找值
赋值符号:将变量值的内存地址绑定给变量名
变量值:存储的数据或者说是记录的事物的状态
为什么要有变量?
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
1.1引用
1.2变量名:见名知意
1.3命名的规范:
①由字母、数字、下划线任意组合
②不能以数字开头
③不能用python的关键字。如:'and', 'as', 'assert',‘print'等
命名风格:
①驼峰体:AgeOfOldEgon= 18
②纯小写加下划线: age_of_oldboy = 18
1.4变量值
id:内存地址
id相同,type和value必定相同;value相同,type肯定相同,但id可能不同。
is:判断id是否相等
==:判断值是否相等
注意:
如果id相等,证明就是同一个内存地址,值一定相等
小整数池:[-5 256],不断优化
①在交互式模式下python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被GC回收
②在pycharm中但在pycharm中运行python程序,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究
布尔值:True False None
内存管理:垃圾回收机制GC
什么是GC?
GC:垃圾回收机制(简称GC)是Python解释器自带一种机,专门用来回收不可用的变量值所占用的内存空间。
为什么要用垃圾回收机制?
程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序崩溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来。
核心原理:引用计数
分代回收:提升效率
标记清除:循环引用导致内存泄露问题
X=100 #100的引用计数为1
Y=X #100的引用计数为2
Y=200 #100的引用计数为1
Del X #100的引用计数为0
2、基本数据类型
数字:
#int整型
定义:age=10 #age=int(10)
用于标识:年龄,等级,身份证号,qq号,个数
#float浮点型
定义:salary=3.1 #salary=float(3.1)
用于标识:工资,身高,体重,
整型int:年龄、个数、号码
浮点型:float
作用:身高、体重、薪资等
字符串str:引号嵌套区别。
列表list:[ ]内用逗号分隔开多个任意类型的元素;按照位置存放多个值
字典dict:{ }用逗号分隔开多个元素,每一个元素的组成都是key:value,其中value是任意类型,而key通常是字符串类型;按照key存放多个值,key反映的是value的属性
#int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
#long(长整型)跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64
>>> type(a) #type()是查看数据类型的方法
<type 'long'>
>>> b = 2**60
>>> type(b)
<type 'int'>
#complex复数型
>>> x=1-2j
>>> x.imag
-2.0
>>> x.real
1.0
3、布尔类型 True False:记录真假两种状态
4、基本运算符
算术运算符:加减乘除,Shell弱类型,Python强类型、解释型、动态的语言,GO静态。
常量:常量即指不变的量,如圆周率 3.141592653..., 或在程序运行过程中不会改变的量。
字符串
#在python中,加了引号的字符就是字符串类型,python并没有字符类型。
定义:name='egon' #name=str('egon')
用于标识:描述性的内容,如姓名,性别,国籍,种族
列表
#在[ ]内用逗号分隔,可以存放n个任意类型的值
定义:students=['egon','alex','wupeiqi',] #students=list(['egon','alex','wupeiqi',])
用于标识:存储多个值的情况,比如一个人有多个爱好
字典
#为何还要用字典?
存放一个人的信息:姓名,性别,年龄,很明显是多个值,既然是存多个值,我们完全可以基于刚刚学习的列表去存放,如下
>>> info=['egon','male',18]
定义列表的目的不单单是为了存,还要考虑取值,如果我想取出这个人的年龄,可以用
>>> info[2]
18
但这是基于我们已经知道在第3个位置存放的是年龄的前提下,我们才知道索引2对应的是年龄
即:
#name, sex, age
info=['egon','male',18]
而这完全只是一种假设,并没有真正意义上规定第三个位置存放的是年龄,于是我们需要寻求一种,即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value,这就用到了字典
布尔
#布尔值,一个True一个False
#计算机俗称电脑,即我们编写程序让计算机运行时,应该是让计算机无限接近人脑,或者说人脑能干什么,计算机就应该能干什么,人脑的主要作用是数据运行与逻辑运算,此处的布尔类型就模拟人的逻辑运行,即判断一个条件成立时,用True标识,不成立则用False标识
>>> a=3
>>> b=5
>>> a > b #不成立就是False,即假
False
>>> a < b #成立就是True, 即真
True
接下来就可以根据条件结果来干不同的事情了:
if a > b
print(a is bigger than b )else
print(a is smaller than b )
上面是伪代码,但意味着, 计算机已经可以像人脑一样根据判断结果不同,来执行不同的动作。