Python现在已经成为最热门的编程语言之一,不论从普及度和生态规模都已位居编程语言第一,而且相关职位也越来越多,无论数据岗、测试岗亦或开发岗都对Python技能有着高度的需求。
把之前总结的Python面试题分享给大家,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。
—1 基础部分—
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的优势。
—2 编程题—
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 = newWheelNumself.color = newColordef move(self)# 创建对象
bike = Bike(2, "green")
print("车的颜色为:%s" % bike.color) #车的颜色为:green
print("车轮子数量为:%s" % bike.wheelNum #车轮子数量为:2
print("车会跑")
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())
....博主太懒了字数太多了,不想写了....文章已经做成PDF,有需要的朋友可以私信我免费获取!