Python经典面试题(100+)

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

Python经典面试题(100+)_第1张图片

把之前总结的Python面试题分享给大家,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。

Python经典面试题(100+)_第2张图片

—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 = 5def fn():    global a    a = 4fn()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)# 创建对象bike = Bike(2, "green")print("车的颜色为:%s" % bike.color) #车的颜色为:greenprint("车轮子数量为:%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:    passfinally:    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,有需要的朋友可以私信我免费获取!

Python经典面试题(100+)_第3张图片

你可能感兴趣的:(phtyon,语言,面试,python,java,面试,开发语言,职场和发展)