1、为什么学习Python?
人生苦短....哈哈,自己想吧!!!
2、通过什么途径学习的Python?
官网、网上视频、学习网站
3、Python和Java、PHP、C、C#、C++等其他语言的对比?
1、python代码,简介,明确,优雅,简单易懂
2、开发效率高
3、可扩展性强
4、简述解释型和编译型编程语言?
解释型:在执行程序时,计算机才一条一条的将代码解释成机器语言给计算机来执行
编译型:是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样计算机运行该程序时可以直接以机器语言来运行此程序,运行速度很快。
5、Python解释器种类以及特点?
Cpython,IPython,Jpython,pypy,Ironpython
Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码,以下是常用的五种Python解释器:
6、位和字节的关系?
一个字节=8位
7、b、B、KB、MB、GB 的关系?
1B(字节) = 8b(位)
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
8、请至少列举5个 PEP8 规范
9、通过代码实现如下转换:
10、请编写一个函数实现将IP地址转换成一个整数。
11、python递归的最大层数?
12、求结果:
v1 = 1 or 3 -------------->1
v2 = 1 and 3-------------->3
v3 = 0 and 2 and 1-------->0
v4 = 0 and 2 or 1--------->1
v5 = 0 and 2 or 1 or 4---->1
v6 = 0 or Flase and 1----->False
13、ascii、unicode、utf-8、gbk 区别?
ASCII码:使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。
Unicode:能够表示全世界所有的字节
GBK:是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。
UTF-8:是一种针对Unicode的可变长度字符编码,又称万国码。
14、字节码和机器码的区别?
机器码:是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂
字节码:是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
15、三元运算规则以及应用场景?
规则:为真时的结果 if 判定条件 else 为假时的结果
```应用场景:在赋值变量的时候,可以直接加判断,然后赋值`
16、列举 Python2和Python3的区别?
17、用一行代码实现数值交换:
18、Python3和Python2中 int 和 long的区别?
python2有非浮点数准备的int和long类型。int类型最大值不能超过sys.maxint,而且这个最大值是平台相关的。
可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。在python3里,
只有一种整数类型int,大多数情况下,和python2中的长整型类似。
19、xrange和range的区别?
python2里,有两种方法获得一定范围内的数字:range(),返回一个列表,还有xrange(),返回一个迭代器。
python3 里,range()返回迭代器,xrange()不再存在。
20、文件操作时:xreadlines和readlines的区别?
readlines返回一个list,xreadlines方法返回一个生成器
21、列举布尔值为False的常见值?
0, [] , () , {} , '' , False , None
22、字符串、列表、元组、字典每个常用的5个方法?
字符串:repleace,strip,split,reverse,upper,lower,join.....
列表:append,pop,insert,remove,sort,count,index.....
元组:index,count,__len__(),__dir__()
字典:get,keys,values,pop,popitems,clear,update,items.....
23、lambda表达式格式以及应用场景?
表达式格式:lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。冒号前是参数,冒号后是返回值。例如:lambda x : 2x
应用场景:经常与一些内置函数相结合使用,比如说map(),filter(),sorted(),reduce()等
24、pass的作用?
1、空语句 do nothing
2、保证格式完整
3、保证语义完整
25、arg和*kwarg作用?
万能参数,解决了函数参数不固定的问题
*arg:会把位置参数转化为tuple
**kwarg:会把关键字参数转化为dict
26、is和==的区别?
is:判断内存地址是否相等
==:判断数值是否相等
27、简述Python的深浅拷贝以及应用场景?
copy():浅copy,浅拷贝指仅仅拷贝数据集合的第一层数据
deepcopy():深copy,深拷贝指拷贝数据集合的所有层
28、Python垃圾回收机制?
29、python的可变类型和不可变类型?
不可变类型(数字、字符串、元组、不可变集合)
可变类型(列表、字典、可变集合)
30、求结果:
31、求结果:
32、列举常见的内置函数?
map,filter,zip,len,bin,oct,hex,int,float,bool,sum,min,max,str,list,tuple,dict,range,next,hash,help,id.....
33、filter、map、reduce的作用?
filter(function,iterable)过滤函数
map(function,iterable)循环函数
reduce(function, iterable)累积函数
34、一行代码实现9*9乘法表。
lis = ['%s*%s=%s'%(i,j,i*j) for i in range(1,10) for j in range(i,10)]
35、如何安装第三方模块?以及用过哪些第三方模块?
pip3 imstall 模块名
django,Matplotlib,Tornado,PyGame
36、至少列举8个常用模块都有那些?
os,sys,time,random,re,hashlib,logging,json,pickle....
37、re的match和search区别?
match:从字符串的开头位置匹配,必须以此为开头
search:从开头开始查,找到符合的就返回结果
38、什么是正则的贪婪匹配?
正则表达式一般趋向于最大长度匹配
39、求结果:
a. [ i % 2 for i in range(10) ] ===>[0,1,0,1,0,1,0,1,0,1]
b. ( i % 2 for i in range(10) )===>返回一个生成器的内存地址
40、求结果:
a. 1 or 2 =========>1
b. 1 and 2 ========>2
c. 1 < (2==2)======>false
d. 1 < 2 == 2======>ture
41、def func(a,b=[]) 这种写法有什么坑?
42、如何实现 "1,2,3" 变成 ['1','2','3'] ?
a = "1,2,3"
li = a.split(',')
43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
li = ['1','2','3']
lis = list(map(lambda x:int(x) li))
44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
a = [1,2,3]正常的列表
b = [(1),(2),(3)] 虽然列表的每个元素加上了括号,但是当括号内只有一个元素并且没有逗号时,其数据类型是元素本身的数据类型
b = [(1,),(2,),(3,)]列表中的元素类型都是元组类型
45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
li = [x*x for x in range(1,11)]
46、一行代码实现删除列表中重复的值 ?
li = [1, 1, 1, 23, 3, 4, 4]
new_li = list(set(li))
new_li.sort(key=li.index)
47、如何在函数中设置一个全局变量 ?
使用python的内置语法 globals 全局变量
48、logging模块的作用?以及应用场景?
logging模块的作用:
1、程序调试
2、了解软件程序运行情况,是否正常
3、软件程序运行故障分析与问题定位
应用场景:网站的运维工作,程序实时监控
49、请用代码简答实现stack 。
50、常用字符串格式化哪几种?
1、%s %d
2、format格式化输出
3、print(f'内容{变量名}')
51、简述 生成器、迭代器、可迭代对象 以及应用场景?
52、用Python实现一个二分查找的函数。
53、谈谈你对闭包的理解?
在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。
但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。
54、os和sys模块的作用?
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
55、如何生成一个随机数?
56、如何使用python删除一个文件?
import os
os.remove(r'path')
57、谈谈你对面向对象的理解?
面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,
不存在的也可以创造出来。对象是特征和技能的结合,其中特征和技能分别对应对象的数据属性和方法属性。
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,
面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。
应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。
58、Python面向对象中的继承有什么特点?
59、面向对象深度优先和广度优先是什么?
60、面向对象中super的作用?
61、是否使用过functools中的函数?其作用是什么?
62、列举面向对象中带双下划线的特殊方法,如:new、init
63、如何判断是函数还是方法?
64、静态方法和类方法区别?
65、列举面向对象中的特殊成员以及应用场景?
66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数
67、什么是反射?以及应用场景?
68、metaclass作用?以及应用场景?
69、用尽量多的方法实现单例模式。
70、装饰器的写法以及应用场景。
71、异常处理写法以及如何主动跑出异常(应用场景)
72、什么是面向对象的mro
73、isinstance作用以及应用场景?
74、写代码并实现:
75、json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
76、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
77、什么是断言?应用场景?
78、使用代码实现查看列举目录下的所有文件。
79、简述 yield和yield from关键字。
80、代码实现六位随机验证码
81、代码实现随机发红包功能
---------------------------九九八十一难后继续闯关东:-------------------------------
1、请尽可能列举python列表的成员方法,并给出列表操作的答案:
2、 Python自省
自省就是面向对象的语言所写的程序在运行时,就能知道对象的类型。也就是程序运行时能够获得对象的类型。比如type(),dir(),getattr(),hasattr(),isinstance()。
3、Python是如何进行内存管理的?
从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制
一、对象的引用计数机制
Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。
引用计数增加的情况:
1,一个对象分配一个新名称
2,将其放入一个容器中(如列表、元组或字典)
引用计数减少的情况:
1,使用del语句对对象别名显示的销毁
2,引用超出作用域或被重新赋值
sys.getrefcount( )函数可以获得对象的当前引用计数
多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。
二、垃圾回收
1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。
2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。
三、内存池机制
Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。
3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
4、介绍一下except的用法和作用?
try…except…except…[else…][finally…]
-- 执行try下的语句,如果引发异常,则执行过程会跳到except语句。对每个except分支顺序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。
-- try下的语句正常执行,则执行else块代码。如果发生异常,就不会执行
-- 如果存在finally语句,最后总是会执行。
5、如何用Python来进行查询和替换一个文本字符串?
可以使用re模块中的sub()函数或者subn()函数来进行查询和替换,比replace的功能更强大!!!
格式:sub(replacement, string[,count=0])(replacement是被替换成的文本,string是需要被替换的文本,count是一个可选参数,指最大被替换的数量)
subn()方法执行的效果跟sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量
6、有没有一个工具可以帮助查找python的bug和进行静态的代码分析?
PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告
Pylint是另外一个工具可以进行codingstandard检查