学习python的第四天

时间:2022-07-07 20:55:19

内存管理

1.Cpython解释器的垃圾及回收机制

什么是垃圾: 当一个值身上没有绑定任何变量(该值的引用计数=0),该值就是垃圾.引用计数增加

  
age=18 # 18的引用计数等于1
x=age # 18的引用计数等于2
print(age)
print(x)

引用计数减少

  
age=19 #18的引用计数等于1
print=(age)

del x #18的引用计数等于0

 

2.变量值的三个特征

id: 反映的是内存地址 type:数据类型 值:

  
age=18
print(id(age))
print(type(age))
print(age)

总结: id相同,值一定相同 值相同,id可以不同

  
>>> x='name:egon age:18***'
>>> y='name:egon age:18***'
>>> id(x)
2847698422856
>>> id(y)
2847698422928

 

3.is与 ==

== : 值是否相等

is : id是否相等

 

4.可变类型与不可变类型

可变类型: 值改变,id不变,证明就是在改变原值

  
l=['a','b','c']
print(id(l))
l[0]='A'
print(id(l))
print(l)

不可变类型:值改变,id不变,证明不是子啊改变原值,而是创建了新值,原值是不可改变类型

  
x=10
print(id(x))
x=11
print(id(x))

 

python2中与用户交互

1.在python3中只有一个input

特点:会将用户输入的任意内容都存成str类型

2.在python2中只有一个raw_input,与python3的input一模一样

x=raw_input('>>>: ')

要求用户必须输入一个明确的类型,输入什么类型就存成什么类型

 

数据类型的基本使用

1.整型 int

作用:用来记录年龄/等级/各种号码状态

定义:

age=10 #age=int(10)

 

2.float浮点型

作用:用于标识工资/身高/体重

定义:

salary=3.1 #salary=float(3.1)

注:整型int和浮点型float也就是数字,可以进行加减乘除等运算.

 

3.字符串str

在python中,加了引号的字符就是字符串类型,python并没有字符类型

作用: 描述性的内容,如姓名/性别/国籍/种族

定义:

name='kopa' #name=str('kapa')

 

单引号与双引号没有区别,只考虑单双的引用配合.

多行字符串必须用多引号

  msq = "My name is Kopa,I'm 18 years old"

msq = '''
努力朝九晚五
渴望浪迹天涯
'''

 

字符串只能进行"相加"和"相乘"运算

  >>> name='egon'
>>> age='18'
>>> name+age #相加其实就是简单拼接
'egon18'
>>> name*5
'egonegonegonegonegon'
注:字符串相加的效率不高

字符串1加字符串3,并不会在字符串1 的基础上加上字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当于字符串1与字符串3的空间被复制了一次.

注:只能字符串加字符串,不能字符串加上其他类型

 

4.列表list

在[ ]内用逗号分隔,可以存放n个任意类型的值

作用:存储多个值的情况,比如一个人有多个爱好

定义:

students = [ 'egon','alex','kopa'] #students = list(['egon','alex','kopa'])

  
#存放多个学生的信息:姓名,年龄,爱好
students_info=[['kopa',18,['play','read']],['egon',18,['sleep','play']]]
print(students_info[0][2][0]) #取出第一个学生的第一个爱好'play'

 

5.字典{ }

为何还要用字典?

存放一个人的信息:姓名/性别/年龄,有很多个值.可以用列表list去存放,定义列表的目的不单单是为了存,还要考虑取值,可用索引对应的值去取,而真正意义上并没有规定什么位置放什么值,所以字典就是既可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value.

在{ }内用逗号分隔,可以存放多个key:value的值,value可以是任意类型.

作用: 存储多个值的情况,每个值都有唯一一个对应的key,可以更加方便高效地取值

定义:

info={'name':'kopa','age':18,'height':126}

字典相关的嵌套/取值
  info={
   'name':'kopa',
   'hobbies':['play','read'],
   'company_info':{
       'name':'oldboy',
       'type':'education'
       'emp_num':40,
  }
}
print(info['commpany_info']['name']) #取公司名


students=[
  {'name':'alex','age':28,'hobbies':['play','sleep']},
  {'name':'kopa','age':18,'hobbies':['play','read']},
]
print(student[1]['hobbies']) #取第二个学生的第二个爱好

6.布尔

布尔值,一个Ture. 一个False

  >>> a=3
>>> b=5
>>>
>>> a > b #不成立就是False,即假
False
>>>
>>> a < b #成立就是True, 即真
True
布尔类型的重点
  • None,0 ,空(空字符串,空列表,空字典等)三种情况下布尔值为Fales

  • 其余均为真

 

基本运算符

比较运算符

==

!=/<> 不等于

`>

<

`>=大于等于

<=小于等于

 

逻辑运算

and

连接左右两个条件,只有两个条件同时成立时and预算的结果为True

or

连接左右两个条件,两个条件成立任意一个or运算的结果就为True

  
print(False or False or True or False or 3 > 10)


res=(True or (False and True)) or ((False or True) and False)
res=(True or False) or (True and False)
res=True or False
print(res)

not

 

  
print(not 10 > 3)

x=None
print(not x is None)
print(x is not None)

age1=18
age2=19
print(age2 is not age1)