美文网首页
python基础方面三

python基础方面三

作者: 迷途man | 来源:发表于2017-09-01 21:49 被阅读0次

    异常

    捕获异常 try...except...

    else  没有捕获异常云行

    finally  一定运行的代码

    有异常 中断,然后在except中执行

    raise 抛出异常 与Java throw 一样

    模块

    import  from .. import  from .. import *

    as 起小名

    定位模块  顺序是:

    1当前目录

    2shell 变量PYTHONPATH下的每个目录

    3 默认路径  Unix下  默认路径一般为/usr/local/lib/python/

    4模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

    包 功能相同模块放在一起  有一个__init__.py文件,里面是__all__=["模块名","模块名"]

    包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包

    有效避免模块名称冲突问题,让应用组织结构更加清晰

    __init__.py 文件写方法那么导入包时就会被调用

    设计模式 :

    简单工厂模式:定义一个类,通过传入参数 返回一个特定的类

    单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。

    元类:创建类的类,像type(python 所有类的父) str(创建字符串对象) int(创建整数对象)

    可以通过__class__来看自己是谁创建的,__class__.__class__可以看到更上的创建类;

    __metaclass__可以指定元类来创建对象,如果不指定,(先找父类,再找模块)默认type

    动态创建属性与方法

    P.run = types.MethodType(run, P)#给这个对象添加实例方法

    Person.testClass = testClass  #给Person类绑定类方法  testClass  上要有@classmethod

    Person.testStatic = testStatic #给Person类绑定静态方法 testStatic 上要有@staticmethod

    删除属性方法

    删除的方法:

    del 对象.属性名

    delattr(对象, "属性名")

    列表生成式  [ x*2 for x in range(5)]

    生成器:一边循环一边计算的机制,称为生成器:generator  ( x*2 for x in range(5))  上面改成小括号,生成对象,通过调用next()得到下个值,没有值时报错,还可以有yield

    迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

    是可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    isinstance() 判断对象是否可以迭代

    一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;

    一类是 generator ,包括生成器和带 yield 的generator function。

    生成器都是 Iterator 对象  通过iter([]) 可以将 list 、 tuple 、 dict 、 set 、 str变成迭代器

    闭包:

    #在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包

    内部函数对外部函数作用域里变量的引用(非全局变量),则

    称内部函数为闭包。

    1.闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成

    2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

    装饰器:运用闭包原理给方法加上其它功能

    引入日志

    函数执行时间统计

    执行函数前预备处理

    执行函数后清理功能

    权限校验等场景

    缓存

    作用域

    LEGB 规则    locals 当前所在命名空间-> enclosing function 外部嵌套函数的命名空间(闭包中常见)-> globals 全局变量,函数定义所在模块的命名空间 -> builtins 内建模块的命名空间。

    is与==  is 比较是否指向同一个对象  == 比较两对象是否相等

    深拷贝,  深拷贝是对于一个对象所有层次的拷贝(递归)  copy.deepcopy

    浅拷贝 : 拷贝了引用,并没有拷贝内容  赋值=

    copy.copy    拷贝不可变类型直接浅拷贝, 如果可变类型 ,只考贝第一层

    可变类型    列表  字典

    不可变  元祖,数字,字符串

    copy是浅拷贝,只拷贝可变对象的父级元素。 deepcopy是深拷贝,递归拷贝可变对象的所有元素

    [-5, 257)  数字已经在python中建好  其他的大数字均要创建新对象

    intern机制  字符串  (没空格)不可修改,默认开启intern机制引用计数为0则销毁  有空格不开启

    垃圾回收

    1引用计数机制 (主要) :python每个东西都是对象,核心是一个结构体  PyObject(每个对象必有),里面的ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少。当引用计数为0时,该对象生命就结束了。

    优点: 简单,实时(垃圾回收时间分摊到平时)

    缺点:维护引用计数消耗资源,循环引用无法回收

    +1情况

    对象被创建,例如a=23

    对象被引用,例如b=a

    对象被作为参数,传入到一个函数中,例如func(a)

    对象作为一个元素,存储在容器中,例如list1=[a,a]

    -1 情况

    对象的别名被显式销毁,例如del a

    对象的别名被赋予新的对象,例如a=24

    一个对象离开它的作用域,例如f函数执行完毕时,func函数中的局部变量(全局变量不会)

    对象所在的容器被销毁,或从容器中删除对象

    2标记-清除和分代收集为辅:

    标记的时候需要确定内存对象的集合Root set,集合里的对象都是可以访问的。如果Root set中的对象引用了其他的对象,那么被引用的对象也不能被标记为垃圾对象。然后从Root set出发,递归遍历Root set能访问到的所有对象,进行标记为不是垃圾对象。遍历结束后,没有被标记的就是垃圾对象。

    分代收集:

    分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。

    Python默认定义了三代对象集合,索引数越大,对象存活时间越长

    常用的python库

    相关文章

      网友评论

          本文标题:python基础方面三

          本文链接:https://www.haomeiwen.com/subject/tzakjxtx.html