- is与==区别
==用来判断两个对象的value(值)是否相等
is 用来判断对象间的唯一身份id(标识)是否相等
在变量与单例值之间比较常用的是is(x is None)
is运算符比 == 速度快
- 深拷贝与浅拷贝
浅拷贝:传递对象的引用,原始值被修改/赋值
深拷贝:开辟新的空间,保存之前的对象,传递之前对象的值到新的空间中,相互之间不会影响
浅拷贝:直接赋值、copy.copy
深拷贝:copy.deepycopy()
- GIL全局解释器
GIL(Global Interpreter Lock) GIL不是Python的特性,是python解释器(CPython)引入的一个概念(解释器:把.py为扩展名的文本文件,通过解释器去执行 CPython IPython PyPy JyPython)。
解决多线程之间数据完整性和状态同步的方法就是加锁,GIL就是一把超级大锁(全局排他锁),对多线程效率有不小影响==Python单线程程序。但如果进行耗时的IO操作,能释放GIL也可以提升运行效率。
- def func(*args,**kwargs)
*args:用来发送非键值对的可变数量的参数列表给函数(1,‘5’,(1,5),[5,8,9],{‘x’:1})
**kwargs:用来传递不定长度的键值对参数给函数(a=2,c=4,x=5)
- 可变类型与不可变类型
不可变:不允许将变量的值发生变化,如果改变变量的值就是新建了一个新的对象(string 数值 元组tuple[0]=100 非法的)
可变:允许变量的值发生变化,可以通过append、+=等操作(list、dict)
- 内存管理机制
引用计数:
每个对象都有指向该对象的引用总数。对象被引用时其计数+1,不再被一个变量引用时-1,等于0时对象被删除
垃圾回收:
1. 引用计数
2.标记清楚:假如两个引用之间存在循环引用,则其实际有效计数为0
3.分代回收:将内存块根据存活时间划分不同集合(‘代’),垃圾收集的频率随‘代’的存活时间增大而减小,活的越长的对象越不可能是垃圾
内存池机制:
呈现金字塔形状 -1-2层由操作系统完成,0层大内存若请求分配的内存大于256K,malloc函数分配内存,free函数释放内存。1,2层内存池有Python的接口函数PyMem_Malloc实现-----若请求分配的内存在1~256字节之间就使用内存池管理系统进行分配。3层 用户对Python对象的直接操作
- 可迭代对象、迭代器和生成器
- yield 与return
yieid 会暂停函数的运行,返回当前数据,执行 next方法,函数会从暂停的位置继续向下执行
return 会打断函数的运行,返回结果,再次运行函数,会从头开始重新执行
yieid 相同条件多次执行可以返回一组有关联的数据
return 相同条件多次执行返回同一结果
yieid 和 return 联用只有python3 支持,并且执行到return 会抛出StopIteration 异常
- 线程、进程、协程
https://blog.csdn.net/qq_39884947/article/details/90144366
https://blog.csdn.net/qq_39884947/article/details/90145156
https://blog.csdn.net/qq_39884947/article/details/90144965
- 装饰器
函数可以作为参数传递
普通的装饰器
def dec(func):
def inner():
print('装饰器运行')
func()#没有则下方被装饰的函数不会运行
return inner
@dec
def my():
print('调用装饰器')
my()
传递参数的装饰器
def dec(func):
def inner(m, n):
print('装饰器运行')
func(m, n) # 没有则下方被装饰的函数不会运行
return inner
@dec
def my(a, b):
print('调用装饰器')
print(a + b)
if __name__ == '__main__':
my(1,3)
有返回值的装饰器
def dec(func):
def inner(m, n):
print('装饰器运行')
result=func(m, n) # 没有则下方被装饰的函数不会运行
return result
return inner
@dec
def my(a, b):
print('调用装饰器')
print(a + b)
return '返回值'+str(a+b)
if __name__ == '__main__':
print(my(1,3))