一 python综合
1.对不定常参数的理解
不定长参数有两种:*args 和**kwargs;
*args:是不定长参数,用来将参数打包成元组(tuple)给函数体调用;
**kwargs:是关键字参数,打包关键字参数成字典(dict)给函数体调,用在定义函数的时候不确定要传入多少个参数的时候就可以使用不定长参数作为形参。
2.对缺省参数的理解
缺省参数指在调用函数的时候没有传入参数的情况下,调用 默认的参数,在调用函数的同时赋值时所传入的参数会代替默认参数。
3. 什么是lambda函数,它有什么好处?写一个匿名函数函数求两个数的和。
lambda函数是匿名函数;使用lambda函数能创建小型匿名函数。这种函数得名于省略了def 声明函数的标准步骤,
f = lambda x,y,:x+y
print(f(2117,2118))
4.深拷贝和浅拷贝的区别
1 python中的拷贝分为浅拷贝和深拷贝,若没有特殊说明拷贝一般默认的是浅拷贝
2 浅拷贝是将对象顶层拷贝,拷贝了引用,并没有拷贝内容,所以原对象改变新对象也跟着改变
3 深拷贝是对一个对象的所有层次的拷贝(递归),但是修改原来的值,新对象不受影响
4 浅拷贝对于可变类型和不可变类型是不同的,对于可变类型值拷贝顶层,不可变类型依然是原来的对象
5. 什么是可变, 不可变? 元组里添加字典,会改变id吗?
1 可变不可变指的是内存中的值是否可以被改变,不可变类型指的是对象所在内存块里的值不可以改变,
2 不可变类型有 数值 字符串 元组 可变类型主要有列表 字典
3 元组的顶层元素中包含可变类型,在可变类型中修改或添加字典id不会改变
6 生成器,迭代器的区别
1 在python中,一边循环一边计算的机制,称为生成器:generator,生成器可以迭代对象,生成器可以通过send传值返回到前面;
2 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问结束,迭代器只能往前不会后退(卒)
3 迭代器是一个可以记住遍历的位置的对象
7 range()和 xrange()函数的用法?
1 range(start,stop,step)函数按照start到stop每个step生成一个数值,生成的是列表对象,一次性将所有数据都返回;
2 xrange(start,stop,step)函数按照从start到stop每个step生成一个数值,返回的是可迭代对象,每次调用返回其中的一个值
8 对装饰器的理解
装饰器本质上是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器返回值也是一个函数对象
9 什么是单例模式,其应用场景有哪些?
1 确保某一个类只有一个实列,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象那个创建型模式。
winodws的任务管理器 回收站 网站计数器
2 单例模式应用场景一般发现在以下条件:
资源共享 的情况下,避免由于资源操作时导致的性能损耗等, 如上述的日志文件 应用程序
控制资源的情况下,方便资源之前的互相通信,如线程池等
10 并行和并发
1 线程是并发,进程是并行
进程之间是独立的,是系统分配资源的最小单位,同一个线程中的所有线程共享资源
并行 : 同时一刻多个任务同时在运行
并发: 在同一时间 间隔内多个任务都在运行,但是并不会在同一个时刻同时运行,存在交替执行的情况
实现并行的库有:multiprocessing
实现并发的库有:threading
程序需要执行较多的读写,请求和回复任务的需要大量的io操作,io密集型操作使用并发更好
cpu 运算量大的程序,使用并行会更好
11 什么是线程安全,什么是互斥锁?
1 每个对象都对应于一个可以称会互斥锁的标记 这个标记用来保证在任一时刻,只能有一个线程访问该对象
2 同一个进程中的多线程之间是共享系统资源的,多个线程同时对一个对象进行操作,
一个线程操作尚未结束,另一个线程已经对其进行操作,导致最终结果出现错误,
此时需要对被操作对象添加互斥锁,保证每个线程对该对象的操作都得到正确的操作。
12 read readline 和readlines 的区别
1 read: 读取整个文件
2 readline:读取下一行,使用生成器方法
3 readlines: 读取真个文件到一个迭代器一供我们遍历
14 什么是闭包
在函数内部定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
15 描述python GIL 的概念 以及他对python多线程的影响
GIL:全局解释器锁
每个线程在执行的过程中都需要先获取GIL,抱枕同一时刻只有一个线程可以执行字节码
线程释放 GIL锁的情况
在IO操作等可能会引起阻塞 system call 之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL
python 使用多进程是可以利用cpu资源的
多线程爬取比单线程性能有提升,因为遇到io阻塞自动释放GIL锁
15 python 中有日志吗 怎么使用
有日志
python 自带loging 模块,,调用logging.basic()方法,配置需要的日志等级和相应的参数,python解释器会按照配置的参数生成相对应的日志
《笔记转载地址传智播客python攻略》