一、变量:
1、变量基本使用
为什么要有变量?
为了让计算机能够像人一样去记忆事物的某种状态,并且状态是可以发生变化的。
详细地说:
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态,以及状态的变化。
2、内存管理:垃圾回收机制
垃圾:当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到,称之为垃圾
引用计数增加
例:
x=10 # 10的引用计数为1
y=x # 10的引用计数为2
z=x # 10的引用计数为3
引用计数减少
del x # 接触变量名x与值10的绑定关系,10 的引用计数变为2
del y #10 的引用计数变为1
print(z) ## 3、 变量有三大组成部分
I:变量名=》是指向等号右侧的值的内存地址的,用来访问等号右侧的值-(变量名相当于门牌号,指向值所在的内存地址,是访问到值的唯一方式)
II:赋值符号: 将变量值的内存地址绑定给变量名-(=号为赋值符号,用来将变量值的内存地址绑定给变量名)
III:变量值:代表记录的事物的状态-(变量的值就是我们存储的数据,反映的是事物的状态)
4、变量名
起名原则:变量名的命名应该见名知意
4.1. 变量名只能是 字母 数字或者下划线的任意组合
4.2. 变量名的第一个字符不能是数字
4.3. 关键字不能声明为变量名, 常用关键字如下
「‘and’ 'as' 'assert' 'break' 'class' 'continue' 'def'......」
ps:尽量不要使用拼音和中文,在见名知意的前提下尽可能短
5、 变量名的命名风格
5.1 纯小写加下划线的方式
ps: age_of_alex=71
print(age_of_alex)
5.2 驼峰体
ps:
AgeOfAles = 73
print(AgeOfAles)
6、 变量值三个重要特征
name = 'egon'
ID:反映的是变量值的内存地址,内存地址不同ID则不同
print(id(name)) #查看name的内存ID号
type:变量值的类型(不同类型的值用来表示记录不同的状态)
print(type(name)) #查看name的class类型 这里是‘str’
value:值本身
print(name)
6.1 is 与 ==
is:比较左右两个值身份ID是否相等,is称之为身份运算符(即is比较两个条件:1、内容是否相同 2、内存中的地址是否相同)
==: 比较左右两个变量的值是否相等
ps:
值相等,ID可能不同, 即两块不同的内存空间里也可以存储相同的值
ID不同的情况下,值有可能相同,即两块不同的内存空寂爱你里也可以存储相同的值
ID相同的情况下,值一定相同, x is y成立,x == y也必然成立
```
>>> x = 'ss 18'
>>> y = 'ss 18'
>>> print(id(x),id(y))
(4349055840, 4349056080)
>>> x == y # 比较x和y的值是否相等
True
>>> x is y # 比较x和y的内存地址是否相等
False
```
了解: 小整数池 从python解释器启动那一刻开始,就会在内存中事先申请了一系列内存空间存放好常用的整数
ps:
```
>>> m = 10
>>> n = 10
>>> id(m)
140639580757568
>>> id (n)
140639580757568
>>> res=4+6
>>> res
10
>>> id(res)
140639580757568
```
7、 常量:不变的量
注意:python语法中没有常量的概念,但是在程序的开发过程中会涉及到常量的概念
AGE_OF_ALEX=73。# 小写字母全为大写代表常量,这只是一种约定、规范
AGE_OF_ALEX=74
print(AGE_OF_ALEX) #输出结果为74,
二、数据类型:
1、 整数(int)
python3 中合并了 int 和 long,统一用 int(不再支持表示 long 类型的 L 常量后缀),采用变长结构,也就意味着可以创建天文数字,只要内存允许;
- 分割标记:对于过长的数字,可进行分割标记,
123_23548_9786_8_234
等同于1232354897868234
;该方式同样适用于二进制(bin)、八进制(oct)和十六进制(hex); - 进制间转换:使用 int 函数,或使用 bin,oct,hex 函数;
- 与字符串互转:使用 int 函数;
- 运算符:除法(/,//,divmod);
- 布尔:是整数的子集;数字0、空值(None)、空序列和空字典都被视作 False,其余为 True;可重写
__bool__
或__len__
方法影响 bool 转换结果; - 枚举:python 中没有枚举的定义,是通过标准库实现的——enum;枚举内部是字典,均有 name 和 value 属性;可通过继承,将枚举值修改为任意类型;
- 内存:预缓存范围是 [-5, 256];
2、 浮点数(flat)
print(10 + 3.3) # 在python中int和float之间可以相加,python中+号比较特殊,字符串中也可以使用+号
3、 字符串(str)
- 作用:记录描述性质的状态,名字,一段话
- 定义:用引号(‘’,“”,’‘’ ‘’‘,“”“ ”“”)包含的一串字符
4、 字节数组
5、 列表(对应c语言中的数组–list)
索引对应值,索引从0开始,0代表第一个
- 作用: 记录多个值,并且可以按照索引取制定位置的值
- 定义:在[]内用逗号分隔开多个任意类型的值, 一个值称之为一个元素
和c数组的区别:
c语言 数组元素只能是同一数据类型, list 的元素可以是不同的数据类型。
c语言数组(除动态数组),长度是固定的。 python list 长度 可以动态增长。
6、 字典(dict)
key对应值,其中key通常为字符串类型,所以key对值可以有描述性的功能
- 作用:用来存储多个值,每个值都有唯一一个key与其对应,key对值有描述性功能
- 定义:在{}内用逗号分隔开多个key:value ps: d={‘a’:1,’b’:2}
list与dict区别:
相同点:
都能存储多个值,称之为容器类型
不同点:
list是用索引对应值,索引反应的是位置/顺序
dict是用key对应值,其中key通常为字符串类型,而str类型具有描述性功能,所以key对值可以有描述性功能
值可取任何数据类型,键必须是不可变的(如字符串,数字或元组);
dict = {'a': 1, 'b': 2, 'b': '3'} # 定义
dict['a'] # 访问
dict['a'] = 8 # 更新
del dict['a'] # 删除键是'a'的条目
dict.clear() # 清空字典所有条目
del dict # 删除字典
cmp len str:字典的字符串表示
copy:浅拷贝 fromkeys:初始化只有 key 的字典 get:返回 value,不存在就返回 default has_key items:可遍历的 key-value 元组
keys values setdefault:如果不存在,就设置为 default update:更新另一个字典到当前字典 pop popitem:删除并返回
7、布尔(bool)
- 作用: 用来记录真假这两种状态
- 定义:
三、垃圾回收机制详解:
1、引用计数
'分两种:一是直接引用,二是间接引用(列表,字典)'
ps:
```python3
x = 10 # 直接引用
print(id(x))
l = ['a',x] #间接引用
print(id(l(1)))
```
引用计数增加
例:
x=10 # 10的引用计数为1
y=x # 10的引用计数为2
z=x # 10的引用计数为3
引用计数减少
del x # 接触变量名x与值10的绑定关系,10 的引用计数变为2
del y #10 的引用计数变为1
print(z)
2、标记清除
l1 = [111,]
l2 = [222,]
l1.append(l2) # 在l1列表里添加l2
l2.append(l1) # 在l2列表里添加l1
3、份代回收