Python核心开发高级知识

欢迎各位小哥哥小姐姐阅读本<小生>的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!!!

您的点赞和关注将是我持续更新的动力呢.^v^

有不懂的问题可以私聊我哦!

GIL(全局解释器锁):

由于历史的原因, 在Cpython虚拟机(解释器)中每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码。

线程释放GIL锁的情况: 
 在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL
 Python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)
 Python 2.x,tickets计数达到100
 
Python可以使用多进程利用多核的CPU资源。

深拷贝、浅拷贝:

浅拷贝是对于一个对象的顶层拷贝(拷贝了引用,并没有拷贝内容)
​
深拷贝是对于一个对象所有层次的拷贝(递归)

私有化:

xx: 公有变量
_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
__xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字
xx_:单后置下划线,用于避免与Python关键词的冲突
​
通过name mangling(名字重整(目的就是以防子类意外重写基类的方法或者属性)如:_Class__object)机制就可以访问private了。
​
父类中属性名为__名字的,子类不继承,子类不能访问
如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
_名的变量、函数、类在使用from xxx import *时都不会被导入

import 导入模块

sys.path:import导入路径

reload:重新导入模块

封装、继承、多态

封装:

在使用面向过程编程时,当需要对数据处理时,需要考虑用哪个模板中哪个函数来进行操作,

但是当用面向对象编程时,因为已经将数据存储到了这个独立的空间中,这个独立的空间(即对象)中通过一个特点的变量(class)能够获取到类(模板),

而且这个类中的方法是有一定数量的,与此类无关的将不会出现在本类中,因此需要对数据处理时,可以很快速的定位到需要的方法是谁 这样更方便。

全局变量是只能有1份的,多很多个函数需要多个备份时,往往需要利用其它的变量来进行储存;
 而通过封装会将用来存储数据的这个变量 变为了对象中的一个“全局”变量,只要对象不一样那么这个变量就可以再有1份,所以这样更方便。
 
 代码划分更清晰。
​
多态:
 实例对象调用一个方法,那么实例对象会先在子类中寻找这个方法,如果子类重写了父类的方法,就调用子类的方法,如果子类中没有,就去父类中调用。

相关推荐