多线程、多进程使用场景
- 多进程适合在CPU密集型操作
- 多线程适合在IO密集型操作
- 多进程属于并行,多线程属于并发
什么是CPU密集型、IO密集型
- CPU密集型:指计算密集型,指系统的硬盘、内存先对于CPU好的多
- IO密集型:指CPU性能要比系统的硬盘、内存要好的多
range和xrange 的区别
切记:不是多了X,不是多了个X,不是多了个X。说多X的出门右转
- 两者用法相同,range返回结果是一个列表,xrange返回结果是一个生成器。前者是在内存直接开辟一个空间,返回一个序列。后者是边循环边使用,用一个开辟一个内存,当遍历的列表很长时,xrange比range性能好
http和https的区别
说多个s你该喂猪了
- http是超文本传输协议
- https是具有ssl加密传输协议
- 端口不同:http端口80、https端口是443
- https需要用到CA安全证书
- http连接是无状态的,https协议是由SSL+http协议构建可进行加密传输、身份认证的网络协议
什么是生成器、迭代器
- 迭代:迭代是反问元素的一种形式,用for循环遍历取值的过程叫做迭代
- 可迭代对象:是for循环可取值遍历的对象
- 迭代器: 是一个可以记住遍历的位置的对象,只能往前不能往后
- 迭代器对象:迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问结束
- 生成器: yield,在python中,一边循环一边计算的机制叫做生成器,代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
return 和 yield的区别
yield:每次启动生成器都会返回一个值,多次启动可以返回多个值,yield可以返回多个值 return:只能返回一次值,代码执行到return语句就停止迭代
迭代器和生成器区别
- 迭代器是一个抽象的概念,任何对象,如果它的类有next方法和iter方法返回本身,对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,他在容器逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIteration异常
- 生成器是创建迭代器简单而强大的工具。它们写起来就像是正规函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置
- 区别:生成器能做到迭代器能做的所有事,而且因为自动创建了iter()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当生成器终结时,还会自动抛出StopIteration异常
面向对象的理解:封装、继承、多态
- 封装:是面向对象的重要法则,就是把对象的属性和行为结合成为一个独立的整体,尽可能隐藏对象内部实现的细节,就是把不想告诉别人的进行隐藏,把想告诉别人的进行公开,别人只能使用我提供的功能实现需求,而不知道是如何实现,增加安全性
- 继承:是面向对象最显著的特性,继承从已有的类派生出新的类叫做子类,子类继承父类的数据属性和行为,并根据自己的需求进行扩展,提高代码复用性
- 多态:指允许不同的的对象对同一消息做出响应。即同一消息可以根据发生对象的不同而采用多种不同的行为方式。封装和继承是为多态准备的,在执行期间判断引用对象的实际类型,根据其实际类型调用其响应的方法
python入口函数的理解
- 通俗理解name == 'main':假如你叫小明,在朋友眼里边name=小明,在你自己眼里name=name。if name == 'main'的意思是:当.py文件被直接运行时,if name==main 之下的代码块将被运行;当.py文件以模块形式导入时,if name==main之下的代码块不被运行
- python属于脚本语言,从第一行开始运行,没有统一的入口。一个python源码文件(.py)除了可以被直接运行外,还可以作为模块,被其他文件导入,不管是直接运行还是导入,.py文件最顶层代码都会被执行,而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行
python中为什么不能使用内置函数作为变量名
- python中不允许使用关键字作为变量名
- python允许使用内置函数名作为变量名,但这会改变函数名的含义