2020年暑假Python复习-第一课python基础知识
一.
标识符:用来识别变量和函数等元素的名称
(1)由字母、数字和下划线组成的任意长度的字符序列1
(2)开始字符必须是字母和下划线、但不能是数字
(3)不能是关键字
变量:指向(或引用)内存中存储的名字
赋值语句:variable = expression
expression是由数值、变量和操作符组成的、可以求得数值的有意义的组合,例如
y = 1 radius = 1.0 x = 6 * (6 / 2) + 4 x = x + y
同时赋值:var1, var2, …, varn = exp1, exp2, …, expn(顺序是一一对应)
同时赋值还可以用来从一条语句中获取多个输入的值,例(这个就类似于C语言的语法输入多个值)
数据类型:
(1)数字类型:整型和实型
等价于false的:【】,(){},0,None,0.0
可以通过内置函数bool()来检测bool(0.0)
(2)操作符
a.‘-‘作为一元运算符代表取相反数
b.‘‘/‘执行实数除法操作,得到的结果为实数
c."//‘‘执行整数除法操作,得到的结果为整数
d."%"执行取余数操作
二.
1.Python是动态类型语言(dynamically typed language),其特点是变量内存地址的分配和类型的检查是在运行(而非编译时)时进行的
动态类型语言的核心是对象和引用分离。例如
a = 5 a = “hello”
a.5是内存中的一个对象,a是指向这个对象的一个引用
b.当引用a指向另外一个字符串对象时,对象5就没有引用指向它,此时Python会将这个没有引用指向的对象销毁,释放相应的内存
2.可变数据对象和不可变数据对象
(1)列表可以通过引用其元素,改变对象数组,这类对象称为可变数据对象
(2)数字和字符串不能改变对象本身,只能改变引用的指向,这类对象称为不可变数据对象
3.动态类型和函数传递
参数x是一个引用,指向a所指向的对象
如果参数是不可变的数据对象,则x和a相互独立,对参数x的操作不会影响引用a
如果参数是可变的数据对象,改变参数有可能改变原对象,因此所有指向该对象的引用都会受影响
4.对象池机制
(1)小整数对象--小整型对象池
由于数值比较小的小整数会频繁出现,将[-5,257)之间的数,缓存在在小整型对象池中。
(2)大整数对象--通用整数对象池
Python运行环境提供了一块内存空间供大整数轮流使用,称为通用整数对象池,这也就是说大整数其实也是有缓存的。该对象池使用链表组织。
ps:对于字符串的缓存仅仅缓存一个单词的字符串
5.三种内存管理机制
(1)垃圾回收
当Python中某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象将作为垃圾被回收
频繁的垃圾回收将大大降低Python的工作效率,所以Python只会在特定条件下,自动启动垃圾回收
垃圾回收启动的条件是Python中分配对象(object allocation)和取消分配对象(object deallocation)的次数的差值高于某个阈值(如下所示,此处为700)
(2)标记清楚
第一阶段是标记阶段,GC(垃圾回收)会把所有的活动对象打上标记
第二阶段是把那些没有标记的非活动对象进行回收
(3)分代回收
原理:存活时间越久的对象,越不可能在后面的程序中变成垃圾
回收策略:
a.Python将所有对象分为0、1和2代,新建对象为第0代
某代对象经历过垃圾回收依然存活,即被归入下一代
垃圾回收时启动对0代对象扫描,0代经过一定次数垃圾回收则会启动对1代对象的垃圾回收;1代经过一定次数垃圾回收则会启动对2代对象的垃圾回收
b.用户也可以通过gc.collect()来手动启动垃圾回收机制
6.内存池机制
a.Python中引入内存池机制,用于对小块内存的分配和释放,即Pymalloc机制
(1)当申请的内存小于256字节时,PyObject_Malloc会在内存池中申请内存
当申请的内存大于256字节时,PyObject_Malloc的行为将转化为malloc的行为
(2)Python对象都有其独立的私有内存池,对象间不共享内存池
(3)不用的内存放到内存池而不是返回给操作系统