知识点回顾

1. 什么是GIL?GIL对多线程的影响GIL全称Global Interpreter Lock(全局解释器锁)。
GIL和Python语言没有任何关系,只是因为历史原因导致在官方推荐的解释器Cpython中遗留的问题。(多线程)每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,但是当遇到IO阻塞会自动的释放GIL锁,所以使用多线程还是比单线程的效率要高。如果想发挥多核CPU资源,可以使用多进程。为了避免受GIL的影响可以不用官方推荐的Cpython,或者用其他语言来实现,使用多进程。
计算密集型建议采用进程
IO密集型建议采用线程或者协程

2.深拷贝和浅拷贝
浅拷贝是对一个对象的顶层(外层)拷贝,只是拷贝了引用,并没有拷贝内容。
变量的赋值是地址的引用,也算是一种浅拷贝。
copy.copy()

深拷贝则是对一个对象深层(递归)的拷贝,保证了数据的独立性。
copy.deepcopy()
在我们执行程序时,深拷贝和前拷贝的的输出的结果和执行的语句相关,还有数据的存储形式有关,我们不能只是依靠逻辑方法去判断

可变类型:列表、字典
不可变类型:数字类型、字符串型、元组

如果是可变类型,浅拷贝只拷贝外层,而深拷贝是完全拷贝

如果是纯的不可变类型,那么无论是浅拷贝还是深拷贝,都只是指向同一个地址。如果不可变类型里面还存在可变类型,则浅拷贝是指向,而深拷贝则为完全拷贝。

(了解)列表切片、字典的copy方法均属于浅拷贝

3.私有化
xx: 公有变量
_x: 单前置下划线,私有化属性或方法,from 模块 import *禁止导入,类对象和子类可以访问。
__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到,类名__xx)
xx:双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字。
xx
:单后置下划线,用于避免与Python关键词的冲突,不推荐使用。

4.模块搜索顺序
import sys
sys.path # 返回查找模块的列表目录,列表中的路径的先后顺序代表了python解释器在搜索模块时的先后顺序。第一个元素返回的是一个空字符串表示当前目录。
sys.path.append(’/home/itcast/xxx’) # 在列表最后追加搜索目录
sys.path.insert(0, ‘/home/itcast/xxx’) # 可以确保先搜索这个路径

5.重新导入模块
from imp import reload
reaload(模块名)
(必须得先import 模块)

6.多模块开发时注意事项
通过from 模块 import 变量,此时相当于给一个变量赋值,如果在程序中修改了变量的值就导致这个变量成了局部变量,跟其他模块就不共享了。如果多模块开发时想导入变量,建议使用import 模块名的方式,然后通过模块名.变量的方式去调用。

7.面向对象的三大特性(封装、继承、多态)
封装就是把方法和属性封装到类(类是抽象的,不能直接使用)的内部,只需要在类的外部,通过对象即可调用。继承实现了代码的重用。子类可以继承父类,并且可以继承多个父类即多继承,子类可以使用父类所拥有的属性和方法(除了私有属性和方法)。多态是以继承和重写父类方法为前提,增加了代码的灵活度,只是一种调用技巧。(并不能提高程序的运行速度)

8.猴子补丁
猴子补丁(monkey parch) 与其说是补丁可以说是乱码,简单的说就是将原有的元对象的属性进行重新定义
实例:

class A:
    def func(self):
        print('hi')


    def monkey(self):
        print('Hi,monkey')


a = A()
A.func = A.monkey


a.func()

#运行结果
Hi,monkey

这就是猴子补丁,是不是很神奇,中心思想有点像装饰器,但是有何装饰器不同,猴子补丁是更改了类方法的属性,不是附加功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值