30题个python面试题整理

1、为什么学习Python?

  1. 语言本身简洁,优美,功能超级强大,
  2. 跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做
  3. 非常火爆的社区
  4. 很多有名的大公司堵在用

2、通过什么途径学习的Python?

通过参加培训、网上搜索资料进行学习

3、Python和Java、PHP、C、C#、C++等其他语言的对比?

  1. c,它是现代编辑语言的老一辈了,在现代应用中使用不多,所有大部分语言,写法都和c语言差不多,常常被用作学习其他语言的基础

  2. PHP语言主要适用于网页编辑,而python适合与各个领域

  3. c++是面向对象的c语言,由于偏底层,所以性能非常高,主要用在一个要求高性能的领域

  4. 学习起来python要比java简单快捷的多,java从c++的系统语言中继承了许多语法和复杂型,而python的语法非常简洁,大大提高编写效率;

  5. python是解释性语言,不需要额外的编译过程,而c#必须编译后才能执行

  6. python程序是开源的,但c#却不是,python可以跨平台

  7. python比c++等这类语言,更容易学习,语法规则简单,语意化,易读易懂,容易维护

4、简述解释型和编译型编程语言?

解释型语言

解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言((Visual Basic)通用的基于对象的程序设计语言))翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

编译器语言

用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论。
部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。

5、Python解释器种类以及特点?

  • CPython:这个解释器是用C语言开发的,所以叫CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器;

  • Jython:Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行;

  • PyPy:PyPy是另一个Python解释器,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度;

  • IPython:IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强。

6、位和字节的关系?

1字节=8位、一个字符=2字节

7、b、B、KB、MB、GB 的关系?

1B=8b、1KB=1024B、1MB=1024KB、1G=1024MB

8、请至少列举5个 PEP8 规范(越多越好)

  1. 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。

  2. 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。

  3. 不要在一句import中多个库,比如import os, sys不推荐

  4. 逗号、冒号、分号前不要加空格。

  5. 总体原则,避免不必要的空格

  6. 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls

9、通过代码实现如下转换:

二进制转换成十进制:v = “0b1111011” 答: print(int(“0b1111011”,2))

十进制转换成二进制:v = 18 答:print(“转换为二进制为:”, bin(18))

八进制转换成十进制:v = “011” 答:print(int(“011”,8))

十进制转换成八进制:v = 30 答:print(“转换为八进制为:”, oct(30))

十六进制转换成十进制:v = “0x12” 答:print(int(“0x12”,16))

十进制转换成十六进制:v = 87 答:print(“转换为十六进制为:”, hex(87))

10、请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:

10            00001010
 3            00000011
 9            00001001
12            00001100

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

答案:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func(x):
    lis = x.strip().split('.')
    li = [bin(int(i)) for i in lis]
    li2 = [i.replace('0b',(10-len(i))*'0') for i in li]
    return int(''.join(li2),2)
ret = func('10.3.9.12')
print(ret)

11、python递归的最大层数?

一般计算机默认的最大递归深度在1000左右,python最大递归深度一般在4000左右,跟计算
机的性能有关系,这个数不是一个定数,可通过一下方式测试

import sys
print(sys.getrecursionlimit())
print(sys.setrecursionlimit(10000))

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的区别?

  1. 默认编码:2–>ascii,3–>utf-8

  2. print的区别:python2中print是一个语句,不论想输出什么,直接放到print关键字后面即可。python3里,print()是一个函数,

    像其他函数一样,print()需要你将要输出的东西作为参数传给它。

  3. input的区别:

    python2有两个全局函数,用在命令行请求用户输入。第一个叫input(),它等待用户输入一个python表达式(然后返回结果)。
    第二个叫做raw_input(),用户输入什么他就返回什么。python3 通过input替代了他们。

  4. 字符串:python2中有两种字符串类型:Unicode字符串和非Unicode字符串。Python3中只有一种类型:Unicode字符串。

  5. xrange()

    python2里,有两种方法获得一定范围内的数字:range(),返回一个列表,还有xrange(),返回一个迭代器。
    python3 里,range()返回迭代器,xrange()不再存在。

17、用一行代码实现数值交换:

a = 1
b = 2

答案:a = 1

b = 2
a,b = b,a

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垃圾回收机制?

python采用的是引用计数机制为主,标记-清除和分代收集(隔代回收、分代回收)两种机制为辅的策略

计数机制

Python的GC模块主要运用了引用计数来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”
解决容器对象可能产生的循环引用的问题。通过分代回收以空间换取时间进一步提高垃圾回收的效率。

标记-清除:

标记-清除的出现打破了循环引用,也就是它只关注那些可能会产生循环引用的对象
缺点:该机制所带来的额外操作和需要回收的内存块成正比。

隔代回收

原理:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,
垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,
就应该减少对它的垃圾收集频率。那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

29、python的可变类型和不可变类型?

不可变类型(数字、字符串、元组、不可变集合)
可变类型(列表、字典、可变集合)

30、求结果:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
v = dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v)
v['k1'] = 777
print(v)

答案:

{'k1':[666],'k2':[666]}
{'k1':777,'k2':[666]}

解析:formkeys()默认参数为可变数据类型时有坑

你可能感兴趣的:(30题个python面试题整理)