首页 后端开发 Python教程 最常见的python面试题及答案总结

最常见的python面试题及答案总结

Feb 23, 2019 am 11:51 AM

最常见的python面试题及答案总结

本篇文章给大家带来的内容是关于最常见的python面试题及答案总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

Python 新手在谋求一份 Python 编程工作前,必须熟知 Python 的基础知识。编程网站 DataFlair 的技术团队分享了一份 2018 年最常见 Python 面试题合集,既有基本的 Python 面试题,也有高阶版试题来指导你准备面试,试题均附有答案。面试题内容包括编码、数据结构、脚本撰写等话题。本文为上篇。

相关文章推荐:《2020年python面试题汇总(最新)

Q 1:Python 有哪些特点和优点?

作为一门编程入门语言,Python 主要有以下特点和优点:

可解释

具有动态特性

面向对象

简明简单

开源

具有强大的社区支持

当然,实际上 Python 的优点远不止如此。

Q 2:深拷贝和浅拷贝之间的区别是什么?

答:深拷贝就是将一个对象拷贝到另一个对象中,这意味着如果你对一个对象的拷贝做出改变时,不会影响原对象。在Python中,我们使用函数deepcopy()执行深拷贝,导入模块copy,如下所示:

>>> import copy
>>> b=copy.deepcopy(a)
登录后复制

最常见的python面试题及答案总结

而浅拷贝则是将一个对象的引用拷贝到另一个对象上,所以如果我们在拷贝中改动,会影响到原对象。我们使用函数function()执行浅拷贝,使用如下所示:

>>> b=copy.copy(a)
登录后复制

最常见的python面试题及答案总结

Q 3. 列表和元组之间的区别是?

答:二者的主要区别是列表是可变的,而元组是不可变的。举个例子,如下所示:

>>> mylist=[1,3,3]
>>> mylist[1]=2
>>> mytuple=(1,3,3)
>>> mytuple[1]=2
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
mytuple[1]=2
登录后复制

会出现以下报错:

TypeError: ‘tuple’ object does not support item assignment
登录后复制

关于列表和元组的更多内容,可以查看这里:

https://data-flair.training/blogs/python-tuples-vs-lists/

从Q4到Q20都是针对新手的Python面试基础试题,不过有经验的人也可以看看这些问题,复习一下基础概念。

Q 4. 解释一下 Python 中的三元运算子

不像 C ,我们在 Python 中没有?:,但我们有这个:

[on true] if [expression] else [on false]
登录后复制

如果表达式为True,就执行[on true]中的语句。否则,就执行[on false]中的语句。

下面是使用它的方法:

>>> a,b=2,3
>>> min=a if a<b else b
>>> min
登录后复制

运行结果:

2
>>> print("Hi") if a<b else print("Bye")
登录后复制

运行结果:

Hi
登录后复制

Q 5. 在 Python 中如何实现多线程?

一个线程就是一个轻量级进程,多线程能让我们一次执行多个线程。我们都知道,Python 是多线程语言,其内置有多线程工具包。

Python 中的 GIL(全局解释器锁)确保一次执行单个线程。一个线程保存 GIL 并在将其传递给下个线程之前执行一些操作,这会让我们产生并行运行的错觉。但实际上,只是线程在 CPU 上轮流运行。当然,所有的传递会增加程序执行的内存压力。

Q 6. 解释一下 Python 中的继承

当一个类继承自另一个类,它就被称为一个子类/派生类,继承自父类/基类/超类。它会继承/获取所有类成员(属性和方法)。

继承能让我们重新使用代码,也能更容易的创建和维护应用。Python 支持如下种类的继承:

单继承:一个类继承自单个基类

多继承:一个类继承自多个基类

多级继承:一个类继承自单个基类,后者则继承自另一个基类

分层继承:多个类继承自单个基类

混合继承:两种或多种类型继承的混合

更多关于继承的内容,参见:

https://data-flair.training/blogs/python-inheritance/

Q 7. 什么是 Flask?

Flask 是 Python 编写的一款轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2。Flask 使用 BSD 授权。其中两个环境依赖是 Werkzeug 和 jinja2,这意味着它不需要依赖外部库。正因如此,我们将其称为轻量级框架。

Flask 会话使用签名 cookie 让用户查看和修改会话内容。它会记录从一个请求到另一个请求的信息。不过,要想修改会话,用户必须有密钥 Flask.secret_key。

Q 8. 在 Python 中是如何管理内存的?

Python 有一个私有堆空间来保存所有的对象和数据结构。作为开发者,我们无法访问它,是解释器在管理它。但是有了核心 API 后,我们可以访问一些工具。Python 内存管理器控制内存分配。

另外,内置垃圾回收器会回收使用所有的未使用内存,所以使其适用于堆空间。

Q 9. 解释 Python 中的 help() 和 dir() 函数

Help() 函数是一个内置函数,用于查看函数或模块用途的详细说明:

>>> import copy
>>> help(copy.copy)
登录后复制

运行结果为:

Help on function copy in module copy:

copy(x)

Shallow copy operation on arbitrary Python objects.

See the module’s __doc__ string for more info.
登录后复制

Dir() 函数也是 Python 内置函数,dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

以下实例展示了 dir 的使用方法:

>>> dir(copy.copy)
登录后复制

运行结果为:

[‘__annotations__’, ‘__call__’, ‘__class__’, ‘__closure__’, ‘__code__’, ‘__defaults__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__get__’, ‘__getattribute__’, ‘__globals__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__kwdefaults__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__name__’, ‘__ne__’, ‘__new__’, ‘__qualname__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’]
登录后复制

Q 10. 当退出 Python 时,是否释放全部内存?

答案是 No。循环引用其它对象或引用自全局命名空间的对象的模块,在 Python 退出时并非完全释放。

另外,也不会释放 C 库保留的内存部分。

Q 11. 什么是猴子补丁?

在运行期间动态修改一个类或模块。

>>> class A:
    def func(self):
        print("Hi")
>>> def monkey(self):
print "Hi, monkey"
>>> m.A.func = monkey
>>> a = m.A()
>>> a.func()
登录后复制

运行结果为:

Hi, Monkey
登录后复制

Q 12. Python 中的字典是什么?

字典是 C++ 和 Java 等编程语言中所没有的东西,它具有键值对。

>>> roots={25:5,16:4,9:3,4:2,1:1}
>>> type(roots)
<class &#39;dict&#39;>
>>> roots[9]
登录后复制

运行结果为:

3
登录后复制

字典是不可变的,我们也能用一个推导式来创建它。

>>> roots={x**2:x for x in range(5,0,-1)}
>>> roots
登录后复制

运行结果:

{25: 5, 16: 4, 9: 3, 4: 2, 1: 1}
登录后复制

Q 13. 请解释使用 *args 和 **kwargs 的含义

当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args。

>>> def func(*args):
    for i in args:
        print(i)  
>>> func(3,2,1,4,7)
登录后复制

运行结果为:

3
2
1
4
7
登录后复制

在我们不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数。

>>> def func(**kwargs):
    for i in kwargs:
        print(i,kwargs[i])
>>> func(a=1,b=2,c=7)
登录后复制

运行结果为:

a.1

b.2

c.7
登录后复制

Q 14. 请写一个Python逻辑,计算一个文件中的大写字母数量

>>> import os

>>> os.chdir(&#39;C:\Users\lifei\Desktop&#39;)
>>> with open(&#39;Today.txt&#39;) as today:
    count=0
    for i in today.read():
        if i.isupper():
            count+=1
登录后复制

运行结果:

26
登录后复制

Q 15. 什么是负索引?

我们先创建这样一个列表:

>>> mylist=[0,1,2,3,4,5,6,7,8]
登录后复制

负索引和正索引不同,它是从右边开始检索。

>>> mylist[-3]
登录后复制

运行结果:

6
登录后复制

它也能用于列表中的切片:

>>> mylist[-6:-1]
登录后复制

结果:

[3, 4, 5, 6, 7]
登录后复制

Q 16. 如何以就地操作方式打乱一个列表的元素?

为了达到这个目的,我们从random模块中导入shuffle()函数。

>>> from random import shuffle
>>> shuffle(mylist)
>>> mylist
登录后复制

运行结果:

[3, 4, 8, 0, 5, 7, 6, 2, 1]
登录后复制

Q 17. 解释Python中的join()和split()函数

Join()能让我们将指定字符添加至字符串中。

>>> &#39;,&#39;.join(&#39;12345&#39;)
登录后复制

运行结果:

‘1,2,3,4,5’
登录后复制

Split()能让我们用指定字符分割字符串。

>>> &#39;1,2,3,4,5&#39;.split(&#39;,&#39;)
登录后复制

运行结果:

[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
登录后复制

Q 18. Python区分大小写吗?

如果能区分像myname和Myname这样的标识符,那么它就是区分大小写的。也就是说它很在乎大写和小写。我们可以用Python试一试:

>>> myname=&#39;Ayushi&#39;
>>> Myname
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
登录后复制

运行结果:

Myname
NameError: name ‘Myname’ is not defined
登录后复制

可以看到,这里出现了NameError,所以Python是区分大小写的。

Q 19. Python中的标识符长度能有多长?

在Python中,标识符可以是任意长度。此外,我们在命名标识符时还必须遵守以下规则:

只能以下划线或者 A-Z/a-z 中的字母开头

其余部分可以使用 A-Z/a-z/0-9

区分大小写

关键字不能作为标识符,Python中共有如下关键字:

Q 20. 怎么移除一个字符串中的前导空格?

字符串中的前导空格就是出现在字符串中第一个非空格字符前的空格。我们使用方法Istrip()可以将它从字符串中移除。

>>> &#39;   Ayushi &#39;.lstrip()
登录后复制

结果:

‘Ayushi   ‘
登录后复制

可以看到,该字符串既有前导字符,也有后缀字符,调用Istrip()去除了前导空格。如果我们想去除后缀空格,就用rstrip()方法。

>>> &#39;   Ayushi &#39;.rstrip()
登录后复制

结果:

‘   Ayushi’
登录后复制

从Q 21到Q 35是为有Python经验者准备的进阶版Python面试题。

Q 21. 怎样将字符串转换为小写?

我们使用lower()方法。

>>> &#39;AyuShi&#39;.lower()
登录后复制

结果:

‘ayushi’
登录后复制
登录后复制

使用upper()方法可以将其转换为大写。

>>> &#39;AyuShi&#39;.upper()
登录后复制

结果:

‘ayushi’
登录后复制
登录后复制

另外,使用isupper()和islower()方法检查字符串是否全为大写或小写。

>>> &#39;AyuShi&#39;.isupper()
False
>>> &#39;AYUSHI&#39;.isupper()
True
>>> &#39;ayushi&#39;.islower()
True
>>> &#39;@yu$hi&#39;.islower()
True
>>> &#39;@YU$HI&#39;.isupper()
True
登录后复制

那么,像@和$这样的字符既满足大写也满足小写。

Istitle()能告诉我们一个字符串是否为标题格式。

>>> &#39;The Corpse Bride&#39;.istitle()
True
登录后复制

Q 22. Python中的pass语句是什么?

在用Python写代码时,有时可能还没想好函数怎么写,只写了函数声明,但为了保证语法正确,必须输入一些东西,在这种情况下,我们会使用pass语句。

>>> def func(*args):
          pass 
>>>
登录后复制

同样,break语句能让我们跳出循环。

>>> for i in range(7):
    if i==3: break
print(i)
登录后复制

结果:

0
1
2
登录后复制

最后,continue语句能让我们跳到下个循环。

>>> for i in range(7):
    if i==3: continue
print(i)
登录后复制

结果:

0
1
2 
4 
5
6
登录后复制

Q 23. Python中的闭包是什么?
当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包。其意义就是会记录这个值。

>>> def A(x):
    def B():
        print(x)
    return B
>>> A(7)()
登录后复制

结果:

17
登录后复制

更多关于闭包的知识,请参看这里:

https://data-flair.training/blogs/python-closure/

**Q 24. 解释一下Python中的//,%和 ** 运算符**

//运算符执行地板除法(向下取整除),它会返回整除结果的整数部分。
>>> 7//2
3
登录后复制

这里整除后会返回3.5。

同样地,执行取幂运算。ab会返回a的b次方。

>>> 2**10
1024
登录后复制

最后,%执行取模运算,返回除法的余数。

>>> 13%7
6
>>> 3.5%1.5
0.5
登录后复制

Q 24. 在Python中有多少种运算符?解释一下算数运算符。

在Python中,我们有7种运算符:算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

我们有7个算术运算符,能让我们对数值进行算术运算:

1.加号(+),将两个值相加

>>> 7+8
15
登录后复制

2.减号(-),将第一个值减去第二个值

>>> 7-8
-1
登录后复制

3.乘号(*),将两个值相乘

>>> 7*8
56
登录后复制

4.除号(/),用第二个值除以第一个值

>>> 7/8
0.875
>>> 1/1
1.0
登录后复制

5.向下取整除、取模和取幂运算,参见上个问题。

Q 25. 解释一下Python中的关系运算符

关系运算符用于比较两个值。

1.小于号(<),如果左边的值较小,则返回True。

>>> &#39;hi&#39;<&#39;Hi&#39;
False
登录后复制

2.大于号(>),如果左边的值较大,则返回True。

>>> 1.1+2.2>3.3
True
登录后复制

3.小于等于号(<=),如果左边的值小于或等于右边的值,则返回Ture。

>>> 3.0<=3
True
登录后复制

4.大于等于号(>=),如果左边的值大于或等于右边的值,则返回True。

>>> True>=False
True
登录后复制

等于号(==),如果符号两边的值相等,则返回True。

>>> {1,3,2,2}=={1,2,3}
True
登录后复制

不等于号(!=),如果符号两边的值不相等,则返回True。

>>> True!=0.1
True
>>> False!=0.1
True
登录后复制

Q 26. 解释一下Python中的赋值运算符

这在Python面试中是个重要的面试问题。

我们将所有的算术运算符和赋值符号放在一起展示:

>>> a=7
>>> a+=1
>>> a
8
>>> a-=1
>>> a
7
>>> a*=2
>>> a
14
>>> a/=2
>>> a
7.0 
>>> a**=2
>>> a
49
>>> a//=3
>>> a
16.0
>>> a%=4
>>> a
0.0
登录后复制

Q 27. 解释一下Python中的逻辑运算符

Python中有3个逻辑运算符:and,or,not。

>>> False and True
False

>>> 7<7 or True
True

>>> not 2==2
False
登录后复制

Q 28. 解释一下Python中的成员运算符

通过成员运算符‘in’和‘not in’,我们可以确认一个值是否是另一个值的成员。

>>> &#39;me&#39; in &#39;disappointment&#39;
True

>>> &#39;us&#39; not in &#39;disappointment&#39;
True
登录后复制

Q 29. 解释一下Python中的身份运算符

这也是一个在Python面试中常问的问题。

通过身份运算符‘is’和‘is not’,我们可以确认两个值是否相同。

>>> 10 is &#39;10&#39;
False

>>> True is not False
True
登录后复制

Q 30. 讲讲Python中的位运算符

该运算符按二进制位对值进行操作。

与(&),按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

>>> 0b110 & 0b010
2
登录后复制

2.或(|),按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。

>>> 3|2
3
登录后复制

3.异或(^),按位异或运算符:当两对应的二进位相异时,结果为1

>>> 3^2
1
登录后复制

4.取反(~),按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1

>>> ~2
-3
登录后复制

5.左位移(<<),运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0

>>> 1<<2
4
登录后复制

6.右位移(>>),把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数

>>> 4>>2
1
登录后复制

更多关于运算符的知识,参考这里:
https://data-flair.training/blogs/python-operators/

Q 31. 在Python中如何使用多进制数字?

我们在Python中,除十进制外还可以使用二进制、八进制和十六进制。

二进制数字由0和1组成,我们使用 0b 或 0B 前缀表示二进制数。

>>> int(0b1010)
10
登录后复制

2.使用bin()函数将一个数字转换为它的二进制形式。

>>> bin(0xf)
‘0b1111’
登录后复制

3.八进制数由数字 0-7 组成,用前缀 0o 或 0O 表示 8 进制数。

>>> oct(8)
‘0o10’
登录后复制

4.十六进数由数字 0-15 组成,用前缀 0x 或者 0X 表示 16 进制数。

>>> hex(16)
‘0x10’

>>> hex(15)
‘0xf’
登录后复制

Q 32. 怎样获取字典中所有键的列表?

使用 keys() 获取字典中的所有键

>>> mydict={&#39;a&#39;:1,&#39;b&#39;:2,&#39;c&#39;:3,&#39;e&#39;:5}
>>> mydict.keys()
dict_keys([&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;e&#39;])
登录后复制

Q 33. 为何不建议以下划线作为标识符的开头

因为Python并没有私有变量的概念,所以约定速成以下划线为开头来声明一个变量为私有。所以如果你不想让变量私有,就不要使用下划线开头。

Q 34. 怎样声明多个变量并赋值?

一共有两种方式:

>>> a,b,c=3,4,5 #This assigns 3, 4, and 5 to a, b, and c respectively
>>> a=b=c=3 #This assigns 3 to a, b, and c
登录后复制

Q 35. 元组的解封装是什么?

首先我们来看解封装:

>>> mytuple=3,4,5
>>> mytuple
(3, 4, 5)
登录后复制

这将 3,4,5 封装到元组 mytuple 中。

现在我们将这些值解封装到变量 x,y,z 中:

>>> x,y,z=mytuple
>>> x+y+z
登录后复制

得到结果12.

相关学习推荐:python视频教程

以上是最常见的python面试题及答案总结的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

什么是正则表达式? 什么是正则表达式? Mar 20, 2025 pm 06:25 PM

正则表达式是在编程中进行模式匹配和文本操作的强大工具,从而提高了各种应用程序的文本处理效率。

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

哪些流行的Python库及其用途? 哪些流行的Python库及其用途? Mar 21, 2025 pm 06:46 PM

本文讨论了诸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和请求等流行的Python库,并详细介绍了它们在科学计算,数据分析,可视化,机器学习,网络开发和H中的用途

Python中如何通过字符串动态创建对象并调用其方法? Python中如何通过字符串动态创建对象并调用其方法? Apr 01, 2025 pm 11:18 PM

在Python中,如何通过字符串动态创建对象并调用其方法?这是一个常见的编程需求,尤其在需要根据配置或运行...

See all articles