Python现在已经成为最热门的编程语言之一,不论从普及度和生态规模都已位居编程语言第一,而且相关职位也越来越多,无论数据岗、测试岗亦或开发岗都对Python技能有着高度的需求。

把之前总结的Python面试题分享给大家,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。
目录
114道经典面试题~关注下方公众号领取全部面试资料!!!

1、简述解释型和编译型编程语言
概念:编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!
区别:编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.
2、Python解释器种类以及特点。
CPython:c语言开发的 使用最广的解释器
IPython:基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样
PyPy:目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率
JPython:运行在Java上的解释器 直接把python代码编译成Java字节码执行
IronPython:运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码
3、Python是如何解释语言的
Python在运行之前不需要对程序进行解释。因此,Python是一种解释型语言。
4、Python是通用编程语言吗
Python能够编写脚本,但从一般意义上讲,它被认为是一种通用编程语言。
5、Python的主要功能是什么
Python是一种解释型语言。与C语言等语言不同,Python不需要在运行之前进行编译。Python是动态语言,当您声明变量或类似变量时,您不需要声明变量的类型。Python适合面向对象的编程,因为它允许类的定义以及组合和继承。Python没有访问说明(如C ++的public,private)。
在Python中,函数是第一类对象。它们可以分配给变量。类也是第一类对象编写Python代码很快,但运行比较慢。Python允许基于C的扩展,例如numpy函数库。Python可用于许多领域。Web应用程序开发,自动化,数学建模,大数据应用程序等等。它也经常被用作“胶水”代码。
6、什么是pep
PEP代表Python Enhancement Proposal。它是一组规则,指定如何格式化Python代码以获得最大可读性。
7、简述多线程、多进程
进程:
1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立。
2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制。
线程:
1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源。
2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃。
应用:
IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间。
CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势。
1、一行代码实现1~100之和
利用sum()函数求和。
print(sum(range(1, 101))) #5050
2、如何在一个函数内部修改全局变量
利用global在函数声明 修改全局变量。
- a = 5
- def fn():
- global a
- a = 4
- fn()
- print(a) #4
3、字典如何删除键和合并两个字典
del和update方法.
- dic = {"name": "xiaowang", "age": 18}
- del dic["name"]
- print(dic) #{'age': 18}
- dic2 = {"name":"xiaozhao"}
- dic.update(dic2)
- print(dic) # {'age': 18, 'name': 'xiaozhao'}
4、python实现列表去重的方法
先通过集合去重,在转列表。
- lis = [11, 12, 13, 12, 15, 16, 13]
- a = set(lis)
- print(a) #{11, 12, 13, 15, 16}
5、fun(*args,**kwargs)中的*args,**kwargs什么意思
当不定数量的参数传递给一个函数时可以使用*args与**kwargs,
*args是用来发送一个键值对可变数量的参数列表给一个函数,意思就是没有key值。
- def gallo(farg, *args):
- print("farg:", farg)
- for x in args:
- print("arg:", x)
- gallo(1, 2, 3, 4)
- # farg: 1
- # arg: 2
- # arg: 3
- # arg: 4
**kwargs将不定长度的键值对,作为参数传递给一个函数。意思就是有key值。
- def gallo(arg, **kwargs):
- print("arg:", arg)
- for key in kwargs:
- print("%s: %s" % (key, kwargs[key]))
-
- gallo(arg=1, arg2=2, arg3=3)
-
- # arg: 1
- # arg2: 2
- # arg3: 3
6、简述面向对象中__new__和__init__区别
__init__是初始化方法,创建对象后,就立刻被默认调用了,可接收参数,如下,
- class Bike:
- def __init__(self, newWheelNum, newColor):
- self.wheelNum = newWheelNum
- self.color = newColor
-
- def move(self):
- print("车会跑")
-
- # 创建对象
- bike = Bike(2, "green")
- print("车的颜色为:%s" % bike.color) #车的颜色为:green
- print("车轮子数量为:%s" % bike.wheelNum #车轮子数量为:2
1) __new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
2) __new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
3) __init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
4) 如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。
- class A(object):
- def __init__(self):
- print("这是 init 方法", self)
-
- def __new__(cls):
- print("这是 cls 的ID", id(cls))
- print("这是 new 方法", object.__new__(cls))
- return object.__new__(cls)
-
- A()
- print("这是类A的ID", id(A))
-
-
- # 这是 cls 的ID 2529692472672
- # 这是 new 方法 <__main__.A object at 0x0000024CFD7CEF10>
- # 这是 init 方法 <__main__.A object at 0x0000024CFD7CEF10>
- # 这是类A的ID 2529692472672
7、简述with方法打开处理文件帮我我们做了什么
- f = open("./1.txt", "wb")
- try:
- f.write("hello world")
- except:
- pass
- finally:
- f.close()
打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open
写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close。
- with open(file='1.txt', mode='r')as f:
- print(f.read())
更多面试内容请关注下方公众号获取!