一、内存管理
1、Cpython解释器的垃圾回收机制
什么是垃圾?
当一个值身上没有绑定任何变量名(该值的引用计数=0)时,该值就是一个垃圾
引用计数增加
age=18 18的引用计数等于1
x=age 18的引用计数等于2
引用计数减少
age=19 18的引用计数等于1
del x 18的引用计数等于0
2、变量值的三个特征
id:反映的是内存地址
type:数据类型
值:表示事物的某种状态
总结:id相同,值一定相同
值相同,id可以不同
3、is 与 ==
==:值是否相等;
is:id是否相等。
4、可变类型与不可变类型
可变类型:值改变,id不变,证明就是在改变原值;
不可变类型:值改变,id也变,证明根本不是在改变原值,是创建了新值,原值就是不可变类型。
二、数据类型的基本使用
1、数字类型
a、整型 int
作用:用来记录年龄、等级、各种号码状态
age=10 相当于 age=int(10)
b、浮点型 float
作用:用来记录身高、体重、工资状态
定义:salary=3.1 相当于 salary=float(3.1)
2、字符串类型 str
作用:用来记录描述性质状态,比如名字、性别
定义:单引号(’‘),双引号(”“),三引号(""" """):可以写入多行内容
x='abc' 相当于 x=str('abc')
print('abc'+'def') ----->'abcdef' #仅限于str类型直接相加
print('abc' *3) ----->'abcabcabc # *的只能是数字
3、列表类型list
作用:用来记录多个值,用索引对应值,索引反应的是位置
定义:在[]内用逗号分隔开多个任意类型的值
4、字典dict
作用:用来记录多个值,用key对应value,其中key对value有描述性的功能
定义:在{}内,用逗号分隔开多元素,每一个元素都是key:value的形式,其中value可以是任意类型,而key通常应该是str类型
5、布尔类型(bool):True False
所有数据类型自带布尔值
布尔值为假的数据类型:0, None, 空。
print(bool([]))、print(bool(’‘))、print(bool(None) -----> False
6、None类型
print(type(None))------->None类型
三、基本运算符
1、常量
纯大写字母命名常量名,如:AGE_OF_OLDBOY=18
常量的值是可以改变的,如:AGE_OF_OLDBOY=19
2、基本运算符
(1)、算术运算
+、-、*、/
print(10/3) 精度float
print(10//3) 取整
print(10**2) 平方
(2)、逻辑运算
a、增量赋值
age=18
age+=1
print(age)
b、交叉赋值
x =10
y=20
# temp=x,
# x=y
# y=temp
x,y=y,x
print(x,y)
c、链式赋值
# x=10
# y=x
# z=y
x=y=z=10
d、解压赋值
l=[1.1,2.2,3.3,4.4,5.5]
a,b,c,d,e=l
print( a,b,c,d,e)
a,b,*_=l #取前两个值
print(a,b)
a,*_,b=l #取第一个和最后一个值
print(a,b)
*_,a,b=l #取最后两个值
print(a,b)
四、流程控制
1、if 判断
(1)if 条件:
代码1
代码2
代码3
......
(2)if 条件:
代码1
代码2
代码3
......
else:
代码1
代码2
代码3
......
(3)if 条件1:
代码1
代码2
代码3
......
elif 条件2:
代码1
代码2
代码3
......
elif 条件3:
代码1
代码2
代码3
......
else:
代码1
代码2
代码3
......
2、while循环:条件循环
while条件:
代码1
代码2
代码3
.........
结束循环的方式
(1)while+break:break代表结束本层循环
(2)改条件的方式tag=True
while tag:
代码块
tag=False
break
eg:
tag=True
while tag:
i = 0
while i<<span se-mark="1">3:
inp = input('请输入年龄>>>')
i = i + 1
if inp =='10':
print('恭喜您猜对了')
tag=False
break
else:
inp1=input('还想继续玩吗?y?>>')
if inp1=='y':
continue
(3)while+continue: continue表示结束本次循环,直接进入下一次
while+else结合
while 条件:
pass
else:
print(‘else子代码块只有在while循环没有被break打断的情况下才会执行’)
3、for循环
l=['a','b','c']
for i in l:
print(i)
dic={'x':111,'y':222,'z':333}
for j in dic:
print(j,dic[j])
while循环称之为条件循环,循环的次数取决于条件何时为False,它的取值依赖于索引
l=['a','b','c']
i=0
while i
print(i,l[i])
i+=1
for循环取值不依赖于索引,像无序的数据类型如对字典取值很方便,循环的次数取
决于数据包含的元素的个数
专门用来取值,在取值方面比while循环更强大,以后但凡用到循环取值的场景,都应
该用for循环
range: python2以列表形式表现,很消耗内存,相当于给一篮子鸡蛋
python3中相当于给一只鸡
for i in range(3): 取0、1、2的值
print(i)
for+break
eg:
names=['egon','kevin','alex','hulaoshi']
name in names:
if nfor ame=='alex':break
print(name) #结果egon,kevin
for+continue
eg:
names=['egon','kevin','alex','hulaoshi']
for name in names:
if name=='alex':continue
print(name) #结果egon,kevin,hulaoshi
for+else :
else子代码块只有在for循环没有被break打断的情况下才会执行’
for循环嵌套
换行符:
print('aaa',end=' ')换行
print('aaa',end='')
print('bbb',end='')取消换行