网站建设后台有哪些项目,做音乐网站,商丘市建立网站公司,泉州北京网站建设价格程序的构成
python程序由模块组成#xff0c;一个模块对应一个python源文件#xff0c;后缀为.py模块由语句组成#xff0c;运行python程序时#xff0c;按照模块中的语句顺序依次执行语句是python程序的构造单元#xff0c;用于创建对象#xff0c;变量赋值#xff0c…程序的构成
python程序由模块组成一个模块对应一个python源文件后缀为.py模块由语句组成运行python程序时按照模块中的语句顺序依次执行语句是python程序的构造单元用于创建对象变量赋值调用函数控制语句等
对象的基本组成
python中一切皆为对象对象由三部分组成 标志类型值
标志一般对应计算机内存地址可以使用内置函数id 返回对象obj的标识类型限制对象的取值范围以及可执行的操作可以使用type获得对象的所属类型值则为对象存储数据的信息直接使用print打印输出 所以对象其实就是一个内存块然后拥有特定的值支持特定类型的相关操作
标识符
简单理解标识符其实就是名字就好像我们每个人也都有自己的名字一样它的主要作用是作为变量、函数、类、模块以及其他对象的名称
python中的标识符的命名并不是随意的需要遵守一定的命名规则
标识符需要由字母、下划线以及数字组成且第一个字符不能是数字标识符不能和python中的保留字相同保留字可以通过以下代码查看
import keyword
print(keyword.kwlist)标识符不能包含各种特殊字符比如说空格 百分号等等标识符中的字母是区分大小写的这个一定要注意python中以下划线开头的标识符通常有特殊含义譬如类属性、类的私有成员、专有标识符等标识符的命名除了要遵守以上这几条规则外不同场景中的标识符其名称也有一定的规范可循例如 当标识符用作模块名时应尽量短小并且全部使用小写字母可以使用下划线分割多个字母例如 game_mian、game_register 等当标识符用作包的名称时应尽量短小也全部使用小写字母不推荐使用下划线例如 com.mr、com.mr.book 等当标识符用作类名时应采用单词首字母大写的形式。例如定义一个图书类可以命名为 Book模块内部的类名可以采用 “下划线首字母大写” 的形式如 _Book函数名、类中的属性名和方法名应全部使用小写字母多个单词之间可以用下划线分割常量命名应全部使用大写字母单词之间可以用下划线分割
变量
因为python中不需要声明变量类型所以使用变量之前直接进行赋值然后变量就会被创建使用对变量进行赋值左侧为变量名右侧为存储在变量中的值
变量类型
数字
int 有符号整型float 浮点型long 长整型也可以代表八进制和十六进制complex 复数
字符串
数字、字母、下划线组成的一串字符用单引号或者双引号进行标识
元组
tuple使用()标识
列表
list使用[]标识
字典
dict使用{}标识
布尔
True / False
垃圾回收机制
主要需要了解三个方面
引用计数
每个对象维护一个ob_ref用来记录当前对象被引用的次数也就是来追踪到底有多少引用指向这个对象说明白点
对象被创建 1对象被引用 1对象被作为参数传入函数 1对象作为元素被存储进容器 1对象别名被显示销毁 也就是使用del函数 -1对象的引别名被赋予新的对象 -1元素从容器被删除或者容器被销毁 -1对象离开作用域譬如函数执行完毕之后函数里面的局部变量 -1
而当指向该对象的内存的引用计数器为0的时候该内存被python虚拟机销毁 引用计数法优缺点也很明显 优点
高效实时性一旦没有引用内存就直接释放了不需要等到特定的时机而且回收内存的时间也被分摊到了平时对象有确定的生命周期易于实现 缺点维护引用计数消耗资源维护引用计数的次数和引用赋值成正比而不像mark and sweep等基本与回收的内存数量有关无法解决循环引用的问题。A和B相互引用而再没有外部引用A与B中的任何一个它们的引用计数都为1但显然应该被回收。 也正是因为引用计数的缺点对于循环引用的情况或许代码内部有一组未使用的、互相指向的对象但是谁都没有外部引用但是因为引用计数都是1而不是0所以不可能由python的垃圾回收机制去释放这些对象并且回收它们占用的内存空间也因此python引入了两种GC机制
标记-清除
标记清除算法是一种基于追踪回收技术实现的垃圾回收算法。
它分为两个阶段,首先是标记阶段GC会把所有的活动对象打上标记然后是把那些没有标记的对象也就是非活动对象进行回收。
而GC判断活动对象和非活动对象的方法为
对象之间通过引用指针连在一起构成一个有向图如下图所示对象为节点引用关系则为线。从根对象出发沿着有向边遍历对象可达的对象标记为活动对象不可达的对象就是要被清除的非活动对象。
根对象就是全局变量、调用栈、寄存器。上图中我们从小圆圈也就是全局变量开始可以直达或者间接到达的是对象1、2、3而4、5不可达因为4、5将作为非活动对象而被GC回收标记清除算法作为python的辅助垃圾收集技术主要处理一些容器对象例如列表字典元组等等 不过这种简单粗暴的标记清除算法也有明显的缺点毕竟它需要顺序扫描整个堆内存
分代回收