面试:python相关基础知识
- 列表list与数组tuple区别
| 区别对象 | List | tuple | 
| 重编辑 | 可 | 不可 | 
| 速度 | 慢 | 快 | 
| 语法 | 中括号 | 小括号 | 
- python与c的区别
python是解释性语言、面向对象、动态语言
c是过程性语言、面向过程、静态语言
pep是什么
是一组python的语法规则、作用是保持代码的最大可读性
- 如何在python管理内存
python有私有堆空间,程序员无法管理,需要核心api才能管理,python解释器富足管理此问题。
- python path是什么
导入库的环境,检查程序员导入库是否存在。
- 什么事导入块,常用有哪些
.py文件。内置有sys,random,math,datatime,jjson
- python是否区分大小写
是的
- 常见的类型转化
int()
float()
Str()
dict()
Tuple()
List()
set()
Ord()
Hex()
- Python 需要缩进
- 什么事__init__
是python的结构或方法,每个类都有,目的是为其分配内存
- 什么事lambda
匿名函数,作用减少单行函数的存在,使代码更加简洁。但不会因此执行效率提高
- python的self是什么
指实例、对象
- [::-1]代表翻转列表{::-1}代表翻转字典
- 怎么随机列表
可以使用shuffle函数进行随机列表元素
- 什么是迭代器
可以遍历、迭代的对象
- 如何生成随机对象
random.random()
random.uniform(a,b)随机返回浮点数
random.range(a,b)随机返回整数
random.normalvariate(mean,sigma)返回正态分布
- range与xfrange区别
range返回静态列表
xrange返回一个生成器,大列表优先考虑这个函数
- pickling与unpickling区别
将任何类型转为字符串为pickling,将字符串解析到原始类型为unpicking
- capitalize()将首字母转为大写
- lower()全部转为小写
- 操作符is,in,not:判断元素是否一样,存在,不存在列表、元组、集合
- Help()查看函数的信息、属性,dir()查看函数定义
- 退出时是否释放所有内存
否,循环引用其他对象或全局对象的不会全部释放,另外饮用c语言也不会释放
- 字典:
由键与键值构成的一对一的关系
- 三元运算
[on_true] if [expression] else [on_false] x
- args,*args,**args区别
args:确定个数变量
*args:不确定变量传入函数,将其打包成元组
**args:不确定个数变量传入函数,将其打包成字典
- split():正则分割字符串到列表
- sub():正则匹配子字符串,用新的字符串代替
- subn():正则匹配子字符串并返回新字符串
- 负指数:代表倒数第几个
- 删除文件:os.remove()
- 内置类型有哪些
int,float,str,boolean
- numpy优点
可以进行矩阵运算,速度快,FFT,线性代数,基本的统计,直方图
- 如何添加数组的元素
append(),insert(index,i),extend()
- 删除数组的元素
pop(),remove()
- 浅拷贝:只拷贝对象的地址,深拷贝:拷贝对象的地址,如果还有父对象,则拷贝父对象存储到另外一个地址。
- 手动实现深拷贝
def deepCopy(src):
    if isinstance(src, dict):
        dst = {}
        for k,v in src.items():
            dst[k] = deepCopy(v)
        return dst
elif isinstance(src, list or tuple):
    dst = []
    for i in src:
        dst.append(deepCopy(i))
    return dst
else:
    return src</code></pre> 
 
 
 
 
- new与init区别
new创建实例,继承父对象,需要返回值,至少有一个参数cls
 
init初始化实例,不需要返回值,至少有一个参数self
 
 
 
- 编码:将字节变成01的码位,解码:将01的码位转成字节
- 装饰器:
 
 
![]()
 
将很少改动的函数打包成一个装饰器,供其他函数使用。
 
- 多进程与多线程区别
多进程:
 
  多进程优点:
 
  1、互相独立,子进程崩溃没关系;
 
  2、通过增加CPU,扩充性能;
 
  3、可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
 
  4、每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。
 
  多进程缺点:
 
  1、逻辑控制复杂,需要和主程序交互;
 
  2、需要跨进程边界,多进程调度开销比较大;
 
  3、最好是多进程和多线程结合
 
  多线程:
 
  多线程的优点:
 
  1、无需跨进程边界;
 
  2、程序逻辑和控制方式简单;
 
  3、共享内存和变量
 
  多线程缺点:
 
  1、每个线程与主程序共用地址空间,受限于2GB地址空间;
 
  2、线程之间协调麻烦;
 
  3、线程之间有耦合性;
 
  4、到达一定的线程数程度后,即使再增加CPU也无法提高性能
 
  5、线程能够提高的总性能有限。
 
 
 
-  CPU密集型 vs IO密集型
 我们可以把任务分为计算密集型和IO密集型。
 计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号