文章目录
- 请写出一个函数满足以下条件
- 谈下python的GIL
- 简述面向对象中_new和init_区别
请写出一个函数满足以下条件
- 该函数的输入是一个仅包含数字的list,输出一个新的list,其中每一个元素要满足以下条件:
- 1、该元素是偶数
- 2、该元素在原list中是在偶数的位置(index是偶数)
def num_list(num):
return [i for i in num if i %2 ==0 and num.index(i)%2==0]
num = [0,1,2,3,4,5,6,7,8,9,10]
result = num_list(num)
print(result)
谈下python的GIL
- GIL是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行 python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程 无法运行,等该线程运行完后其他线程才能运行。
- 如果线程运行过程中遇到耗时操作,则 解释器锁解开,使其他线程运行。
- 所以在多线程中,线程的运行仍是有先后顺序的,并不 是同时进行。多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,
- 所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
简述面向对象中_new和init_区别
- 1、 _new_至少要有一个参数cis
- 代表当前类,此参数在实例化时由Python解释器自 动识别
- 2、 _new_必须要有返回值,返回实例化出来的实例
- 这点在自己实现_new_时要特 别注意,可以return父类
- (通过super(当前类名,cis)) _new_出来的实例
- 或者直接 是object的_new_出来的实例
- 3、 _init_有一个参数self
- 就是这个_new」g回的实例,_吊计_在_酒可_的基础上 可以完成一些其它初始化的动作
- _init_不需要返回值
- 4、 如果_new_创建的是当前类的实例,会自动调用_init_函数
- 通过return语句里面 调用的_new_函数的第一个参数是cis来保证是当前类实例
- 如果是其他类的类名,;那么实际创建返回的就是其他类的实例
- 其实就不会调用当前类的_init_函数,也不会 调用其他类的_init_函数。