一、内存管理
-
cpython解释器的垃圾回收机制
什么是垃圾:当一个值身上没有人绑定任何变量名(该值的引用计数=0)时
引用计数增加
age = 18 #18的引用计数等于1 x = age #18的引用计数等于2 print(age) print(x)
引用计数减少
age = 19 #给变量重新赋值,18的引用计数等于1 print(age) del x #删除x的引用,18的引用等于0
-
变量值的三个特征:
age = 18
print(id(age)) #id:反映的是内存地址
print(type(age)) #type:数据类型
print(age) #值:
总结: id相同,值一定相同 值相同,id可以不同 |
#在交互模式中
python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被GC回收
>>> x = 'name:egon age:18'
>>> y = 'name:egon age:18'
>>> id(x)
1872412445120
>>> id(y)
1872412445192
#在pycharm中
但在pycharm中运行python程序,pycharm出于对性能的考虑,会扩大小整数池的范围,其他的字符串等不可变类型也都包含在内一便采用相同的方式处理了,我们只需要记住这是一种优化机制,至于范围到底多大,无需细究
x = 11111111111111111111111111231231231231222222222222
y = 11111111111111111111111111231231231231222222222222
print(id(x))
1937134351488
print(id(y))
1937134351488
-
is 与 ==
== :值是否相等
is: id是否相等
-
可变类型与不可变类型
可变类型:值改变,id不变,证明就是在改变原值
不可变类型:值改变,id也变,证明不是在改变原值,是创建了新值
不可变类型举例:
>>> x = 10 id(x) 1975086848 >>> x = 11 id(x) 1975086880
可变类型举例:
l = ['a','b','c'] print(id(l)) #id 2615441779656 l[0]='a' print(id(l)) #id 2615441779656
二、python2中与用户交互
-
在pyhton3中只有一个input:
特点:用户输入的任意内容都存成str类型
x = input('>>>: ') print(type(x))
salary = input('>>>: ') salary = int(salary) print(salary * 12)
-
在python2中只有一个raw_input,与python3中的input 一模一样,python2中的raw_input必须要求用户必须输入一个明确的类型,输入什么类型就存成什么类型
x = raw_input('>>>:')
三、数据类型的基本使用
-
数字类型
整型int
作用:用来记录年龄、等级、各种号码状态
定义:
age = 10 print(type(age))
使用:
print(age + 1) print(age > 3)
-
浮点型float
作用:用来记录身高、体重、工资状态
定义:
salary = 3.1 print(type(salary))
使用:
print(3.1 + 2.3) print(3.1 > 2.3)
-
字符串类型str
作用:用来记录描述性质状态,比如名字、性别
定义:在单引号(’’)、双引号("")、三引号内(’’’ ‘’’,’""" “”")包含一系列的字符
使用:
x = 'abc' y = "abc" z = """ abc xxxx """ msg='my name is "egon"' print('abc' + 'def') #仅限于str类型直接相加 print('abc' * 10) #*的只能是数字
了解:ASCII表
x = 'abcdef' y = 'z' print(x > y) #字符串也可以比较 print('a' > 10)
-
列表类型
作用:用来记录多个值,用索引对应值,索引反映位置
定义:在[] 内用逗号分隔开多个任意类型的值
使用:
l = [1,3.1,'xxx',['a','b','c']] print(type(l)) print(l[0]) print(l[2]) print(l[3][0]) students_info=[ ['egon',18,['play',]], ['alex',18,['play','sleep']] ] print(students_info[1][2][0])
-
字典的方式
emp_info={'name':'egon','age':18,"gender":'male','company_info':['Oldboy','SH',200]} print(emp_info['age']) print(emp_info['company_info'][0])
-
布尔类型:True、Flase
print(type(True)) #<class 'bool'> print(type(False)) #<class 'bool'> tag1 = True tag2 = True print(id(tag1)) print(id(tag2))
所有数据类型都自带布尔值
布尔值为假的数据类型:0,None,空
print(bool([])) #False print(bool('')) #False print(bool(None)) #False
-
None
print(type(None)) #<class 'NoneType'>
四、基本运算符
-
比较运算符
>
>=
<
<=
==
!=
print(10 !=11)
了解
x = None print(x == None) #True print(x is None) #True
list1 = ['abc','1',['a','b','c']] list2 = ['abc','2'] print(list2 > list1) #True
-
逻辑运算符
and:连接左右两个条件,只有两个条件同时成立时and运算的结果为True
print(10 > 9 and 3 > 2 and 'egon' == 'egon' 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) #True
-
not
print(not 10 >3) x = None print(x is not None) age1 = 18 age2 = 19 print(age2 is not age1)
小练习:
name_bk = 'egon'
pwd_bak = '123'
name = input('please input your name: ')
pwd = input('please input your password: ')
if name == name_bk and pwd == pwd_bak:
print('login successfull')
else:
print('username or password error')