1、 *args 和 **kwargs
*
args主要是用来对tuple型参数打包或解包,对应的是函数的位置参数。而**
kwargs则是主要用来对dict型参数,对应的是函数的关键字参数。
def function(x, y, *args):
print(x, y, args)
function(1, 2, 3, 4, 5)
结果:1,2,(3,4,5)
def function(**kwargs):
print( kwargs)
function(a=2)
结果:{'a':2}
2、rlock lock的区别
rlock是可重入锁,因为同步锁用lock时会产生迭代死锁、相互调用死锁,rlock可避免迭代死锁
相互调用死锁可加入timeout来释放锁
3、join()的含义
多线程运行,增加join后,主线程完成后进入阻塞状态,直到子线程运行结束,主线程才会结束
不加入join,主线程执行完后就会结束,剩下子线程自己运行
如果是守护线程,主线程执行完就会关闭程序,不会等子线程运行
守护线程大于join,主线程运行完等待timeout直接结束
4、xrange、range区别
range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)
xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好
5、is ==区别
is比较的是地址,==比较的是值
6、垃圾回收机制
引用计数:每个对象都有计数的对象,有新的引用时+1,引用它的对象被删除时-1,为0时被释放
标记——清除:当没有空闲的内存时,从寄存器和程序栈出发遍历标记,没有被标记的被释放
分代技术:将内存块分区,存货的时间月茶女,被释放的概率越小
7、闭包
8、协程
9、迭代器
生成器——一遍循环一遍计算的机制,迭代器的一种
10、python的重载
可变参数类型——python参数不分个数
可变参数个数——缺省参数*arg **arg
网友评论