Python经典面试题

发布于:2022-07-17 ⋅ 阅读:(206) ⋅ 点赞:(0)

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())

更多面试内容请关注下方公众号获取!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到