Python----面向对象(语法高级):GIL锁、深浅拷贝、多继承以及super( )、上下文管理器

GIL全局解释器锁

  •  一个进程一个gil锁,单进程多线程无法实现并行,多个线程争夺锁gil锁,浪费了资源
  •  使用进程数等于cpu数最大效率运行,可以采用进程的方式实现真正的并行
  •  历史遗留问题,解决单核时代多任务实现,gil全局解释器锁仅存在Cpython解释器中

imopt与from的区别以及重载模块

  •  import是导入模块中的数据,数据存在时则是引用内存中的数据
  •  from是重新导入创建一份新的数据,可以简单理解成深拷贝
  •  当多模块需要共用一个数据时,必须使用import导入
  •  当模块文件发生修改后,可以使用reload重载模块对象,reload(需要重载的模块名)
  •  import sys 使用sys.path可以查看导入查询路径,默认优先使用当前路径
  •  sys.path.append('路径') 或insert(下标,'路径')添加新的模块路径,可以确保先查询这个路径
  •  要避免使用了相同的模块名,导致导入意料之外的数据

深拷贝与浅拷贝

  •  浅拷贝只是创建一个变量指向原有的数据,即引用
  •  深拷贝是重新在内存中创建一份数据,保证数据的独立性
  •  赋值本质上就是对象之间的引用传递,也就是多个对象执行同一个数据空间
  •   时间角度,浅拷贝花费时间更少
  •   空间角度,浅拷贝花费内存更少
  •   效率角度,浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高。

多继承super和MRO算法顺序

  •  多继承 一个子类同时继承自多个父类,又称菱形继承、钻石继承。
  •  mro解决了多继承时,每个类只出现一次
  •  super本质上按照MRO顺序去进行调用方法,类名.__mro__()或类名.mro()获取类的mro顺序表
  •  使用super可以保证多继承的情况下,每个类只初始化一次,而使用类名的方法会导致方法被执行多次
  •  使用super方法会执行全部父类的方法,使用类名的方法时需要将每一个父类写一遍
  •  继承时传参,使用super或类名的方式,都必须传递父类所需要的全部参数,否则报错,

魔法方法和属性

  •  __init__:初始化执行
  •  __str__:打印对象时执行
  •  __del__:对象被销毁时执行
  •  __doc__:函数的说明文档
  •  __call__:对象()时执行
  •  __dict__:输出对象的所有属性
  •  __module__:输出当前对象所在的模块
  •  __class__:输出当前对象所在的类

@property装饰器

  •  使用property装饰类中方法后,可以当做属性一样直接使用,无需添加()
  •  使用property可以来创建一个只可以被读取的常量值
  •  添加过property后,可以使用@指定同名方法名.setter,@同名方法名.deleter,
  •  setter可以当做普通属性一样直接修改值,deleter进行删除

with与上下文管理器

  •   with 上下文管理器 as 对象:要执行的代码
  •   使用with时,不管是否发生异常,都会自动关闭对象

 上下文管理器:本质上就是可以被with操作的对象

  •   使用类实现上下文管理器
  •    类实现__enter__方法,方法内返回操作对象
  •    类实现__exit__方法,退出时执行的语句(异常也会执行)
  •   工作中需要自动关闭时,我们可以用上下文管理器对代码进行封装

闭包

  •  一个函数内部还有一个内层函数,函数返回值为返回内层函数的引用
  •  通过在函数内部嵌套重新定义一个函数 并且该函数还可以直接使用外部函数提供的变量

装饰器

  •  前提:不改变原有代码,增加新的功能
  •   开放封闭原则:已经实现的功能代码不允许被修改,但可以被扩展
  •   道德上,不改变原有的参数和返回值

 应用场景

  •   引入日志
  •   函数执行时间统计
  •   执行函数前预备处理
  •   执行函数后清理功能
  •   权限校验等场景
  •   缓存

 执行顺序

  •   先检查原函数代码,再执行语法糖即装饰语句
  •   先包由内向外,后执行由外向内

 使用

  •   存在一个已有功能的函数
  •   创建一个补充额外功能的闭包函数,闭包函数内要执行传入的引用(原有函数的功能)
  •   在需要被添加额外功能的函数上面@添加额外功能的闭包函数名

 类装饰器

  1. 定义一个类,__init__函数中,接受一个func参数,self.__func = func,
  2. 然后实现__call__函数,函数中进行添加装饰功能,并进行调用原来函数,self.__func ()

and与or

  •  在python中,and和or执行布尔逻辑运算,但它们返回的不是布尔值,使用and时,如果所有值为真,则返回最后一个真值,如果某个值为假,则返回第一个假值
  • 使用or时,如果所有值为假,则返回最后一个假值,如果有值为真,则返回第一个真值
  •  逻辑运算符:连接条件运算
  •  0为false ‘0’为True

栈、队列、管道

  •  栈:先进后出
  •  队列:先进后出
  •  管道:连接,将输入原形输出

#TODO  主要备注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值