Python面试中一些常见的问题及其答案

python 新手在谋求一份 python 编程工作前,必须熟知 python 的基础知识。编程网站 dataflair 的技术团队分享了一份 2018 年最常见 python 面试题合集,既有基本的 python 面试题,也有高阶版试题来指导你准备面试,试题均附有答案。面试题内容包括编码、数据结构、脚本撰写等话题。
q 1:python 有哪些特点和优点?
作为一门编程入门语言,python 主要有以下特点和优点:
可解释
具有动态特性
面向对象
简明简单
开源
具有强大的社区支持
当然,实际上 python 的优点远不止如此
q 2:深拷贝和浅拷贝之间的区别是什么?
答:深拷贝就是将一个对象拷贝到另一个对象中,这意味着如果你对一个对象的拷贝做出改变时,不会影响原对象。在 python 中,我们使用函数 deepcopy() 执行深拷贝,导入模块 copy,如下所示:
1>>>importcopy2>>>b=copy.deepcopy(a)
而浅拷贝则是将一个对象的引用拷贝到另一个对象上,所以如果我们在拷贝中改动,会影响到原对象。我们使用函数 function() 执行浅拷贝,使用如下所示:
1>>>b=copy.copy(a)
q 3. 列表和元组之间的区别是?
答:二者的主要区别是列表是可变的,而元组是不可变的。举个例子,如下所示:
1>>>mylist=[1,3,3]2>>>mylist[1]=23>>>mytuple=(1,3,3)4>>>mytuple[1]=25traceback(mostrecentcalllast):6file,line1,in7mytuple[1]=2
会出现以下报错:
1typeerror:‘tuple’objectdoesnotsupportitemassignment
关于列表和元组的更多内容,可以查看这里:
https://data-flair.training/blogs/python-tuples-vs-lists/
从 q4 到 q20 都是针对新手的 python 面试基础试题,不过有经验的人也可以看看这些问题,复习一下基础概念。
q 4. 解释一下 python 中的三元运算子
不像 c++,我们在 python 中没有?:,但我们有这个:
1[ontrue]if[expression]else[onfalse]
如果表达式为 true,就执行 [on true] 中的语句。否则,就执行 [on false] 中的语句。
下面是使用它的方法:
1>>>a,b=2,32>>>min=aifa>>min
运行结果:
122>>>print(hi)ifa>>importcopy2>>>help(copy.copy)
运行结果为:
1helponfunctioncopyinmodulecopy:234copy(x)56shallowcopyoperationonarbitrarypythonobjects.78seethemodule’s__doc__stringformoreinfo.
dir() 函数也是 python 内置函数,dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。
以下实例展示了 dir 的使用方法:
1>>>dir(copy.copy)
运行结果为:
1[‘__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. 什么是猴子补丁?
在运行期间动态修改一个类或模块。
1>>>classa:2deffunc(self):3print(hi)4>>>defmonkey(self):5printhi,monkey6>>>m.a.func=monkey7>>>a=m.a()8>>>a.func()
运行结果为:
1hi,monkey
q 12. python 中的字典是什么?
字典是 c++ 和 java 等编程语言中所没有的东西,它具有键值对。
1>>>roots={25:5,16:4,9:3,4:2,1:1}2>>>type(roots)34>>>roots[9]
运行结果为:
13
字典是不可变的,我们也能用一个推导式来创建它。
1>>>roots={x**2:xforxinrange(5,0,-1)}2>>>roots
运行结果:
1{25:5,16:4,9:3,4:2,1:1}
q 13. 请解释使用 *args 和 **kwargs 的含义
当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用 * args。
1>>>deffunc(*args):2foriinargs:3print(i)4>>>func(3,2,1,4,7)
运行结果为:
13232451674897
在我们不知道该传递多少关键字参数时,使用 **kwargs 来收集关键字参数。
1>>>deffunc(**kwargs):2foriinkwargs:3print(i,kwargs[i])4>>>func(a=1,b=2,c=7)
运行结果为:
1a.123b.245c.7
q 14. 请写一个 python 逻辑,计算一个文件中的大写字母数量
1>>>importos23>>>os.chdir('c:\users\lifei\desktop')4>>>withopen('today.txt')astoday:5count=06foriintoday.read():7ifi.isupper():8count+=19print(count)
运行结果:
126
q 15. 什么是负索引?
我们先创建这样一个列表:
1>>>mylist=[0,1,2,3,4,5,6,7,8]
负索引和正索引不同,它是从右边开始检索。
1>>>mylist[-3]
运行结果:
16
它也能用于列表中的切片:
1>>>mylist[-6:-1]
结果:
1[3,4,5,6,7]
q 16. 如何以就地操作方式打乱一个列表的元素?
为了达到这个目的,我们从 random 模块中导入 shuffle() 函数。
1>>>fromrandomimportshuffle2>>>shuffle(mylist)3>>>mylist
运行结果:
1[3,4,8,0,5,7,6,2,1]
q 17. 解释 python 中的 join() 和 split() 函数
1join()能让我们将指定字符添加至字符串中。23>>>','.join('12345')
运行结果:
1‘1,2,3,4,5’
split() 能让我们用指定字符分割字符串。
1>>>'1,2,3,4,5'.split(',')
运行结果:
1[‘1’,‘2’,‘3’,‘4’,‘5’]
q 18. python 区分大小写吗?
如果能区分像 myname 和 myname 这样的标识符,那么它就是区分大小写的。也就是说它很在乎大写和小写。我们可以用 python 试一试:
1>>>myname='ayushi'2>>>myname3traceback(mostrecentcalllast):4file,line1,in
运行结果:
1myname2nameerror:name‘myname’isnotdefined
可以看到,这里出现了 nameerror,所以 python 是区分大小写的。
q 19. python 中的标识符长度能有多长?
在 python 中,标识符可以是任意长度。此外,我们在命名标识符时还必须遵守以下规则:
只能以下划线或者 a-z/a-z 中的字母开头
其余部分可以使用 a-z/a-z/0-9
区分大小写
关键字不能作为标识符,python 中共有如下关键字:
q 20. 怎么移除一个字符串中的前导空格?
字符串中的前导空格就是出现在字符串中第一个非空格字符前的空格。我们使用方法 istrip() 可以将它从字符串中移除。
1>>>'ayushi'.lstrip()
结果:
1‘ayushi‘
可以看到,该字符串既有前导字符,也有后缀字符,调用 istrip() 去除了前导空格。如果我们想去除后缀空格,就用 rstrip() 方法。
1>>>'ayushi'.rstrip()
结果:
1‘ayushi’
从 q 21 到 q 35 是为有 python 经验者准备的进阶版 python 面试题。
q 21. 怎样将字符串转换为小写?
我们使用 lower() 方法。
1>>>'ayushi'.lower()
结果:
1‘ayushi’
使用 upper() 方法可以将其转换为大写。
1>>>'ayushi'.upper()
结果:
1‘ayushi’
另外,使用 isupper() 和 islower() 方法检查字符串是否全为大写或小写。
1>>>'ayushi'.isupper() 2false 3 4>>>'ayushi'.isupper() 5true 6 7>>>'ayushi'.islower() 8true 910>>>'@yu$hi'.islower()11true1213>>>'@yu$hi'.isupper()14true
那么,像 @和 $ 这样的字符既满足大写也满足小写。
istitle() 能告诉我们一个字符串是否为标题格式。
1>>>'thecorpsebride'.istitle()2true
q 22. python 中的 pass 语句是什么?
在用 python 写代码时,有时可能还没想好函数怎么写,只写了函数声明,但为了保证语法正确,必须输入一些东西,在这种情况下,我们会使用 pass 语句。
1>>>deffunc(*args):2pass3>>>
同样,break 语句能让我们跳出循环。
1>>>foriinrange(7):2ifi==3:break3print(i)
结果:
10231452
最后,continue 语句能让我们跳到下个循环。
1>>>foriinrange(7):2ifi==3:continue3print(i)
结果:
10 2 31 4 52 6 74 8 9510116
q 23. python 中的闭包是什么?当一个嵌套函数在其外部区域引用了一个值时,该嵌套函数就是一个闭包。其意义就是会记录这个值。
1>>>defa(x):2defb():3print(x)4returnb5>>>a(7)()
结果:
17
更多关于闭包的知识,请参看这里:
https://data-flair.training/blogs/python-closure/
**q 24. 解释一下 python 中的 //,% 和 ** 运算符 **
1//运算符执行地板除法(向下取整除),它会返回整除结果的整数部分。23>>>7//243
这里整除后会返回 3.5。
同样地,执行取幂运算。ab 会返回 a 的 b 次方。
1>>>2**1021024
最后,% 执行取模运算,返回除法的余数。
1>>>13%7263>>>3.5%1.540.5
q 24. 在 python 中有多少种运算符?解释一下算数运算符。
在 python 中,我们有 7 种运算符:算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。
我们有 7 个算术运算符,能让我们对数值进行算术运算:
1. 加号(+),将两个值相加
1>>>7+8215
2. 减号(-),将第一个值减去第二个值
1>>>7-82-1
3. 乘号(*),将两个值相乘
1>>>7*8256
4. 除号(/),用第二个值除以第一个值
1>>>7/820.8753>>>1/141.0
5. 向下取整除、取模和取幂运算,参见上个问题。
q 25. 解释一下 python 中的关系运算符
关系运算符用于比较两个值。
1. 小于号(>>'hi'),如果左边的值较大,则返回 true。
1>>>1.1+2.2>3.32true
3. 小于等于号(>>3.0=),如果左边的值大于或等于右边的值,则返回 true。
1>>>true>=false2true
等于号(==),如果符号两边的值相等,则返回 true。
1>>>{1,3,2,2}=={1,2,3}2true
不等于号(!=),如果符号两边的值不相等,则返回 true。
1>>>true!=0.12true3>>>false!=0.14true
q 26. 解释一下 python 中的赋值运算符这在 python 面试中是个重要的面试问题。
我们将所有的算术运算符和赋值符号放在一起展示:
1>>>a=7 2>>>a+=1 3>>>a 48 5 6>>>a-=1 7>>>a 87 910>>>a*=211>>>a12141314>>>a/=215>>>a167.01718>>>a**=219>>>a20492122>>>a//=323>>>a2416.02526>>>a%=427>>>a280.0
q 27. 解释一下 python 中的逻辑运算符
python 中有 3 个逻辑运算符:and,or,not。
1>>>falseandtrue2false34>>>7>>not2==28false
q 28. 解释一下 python 中的成员运算符
通过成员运算符‘in’和‘not in’,我们可以确认一个值是否是另一个值的成员。
1>>>'me'in'disappointment'2true34>>>'us'notin'disappointment'5true
q 29. 解释一下 python 中的身份运算符
这也是一个在 python 面试中常问的问题。
通过身份运算符‘is’和‘is not’,我们可以确认两个值是否相同。
1>>>10is'10'2false34>>>trueisnotfalse5true
q 30. 讲讲 python 中的位运算符
该运算符按二进制位对值进行操作。
与(&),按位与运算符:参与运算的两个值, 如果两个相应位都为 1, 则该位的结果为 1, 否则为 0
1>>>0b110&0b01022
2. 或(|),按位或运算符:只要对应的二个二进位有一个为 1 时,结果位就为 1。
1>>>3|2233
3. 异或(^),按位异或运算符:当两对应的二进位相异时,结果为 1
1>>>3^221
4. 取反(~),按位取反运算符:对数据的每个二进制位取反, 即把 1 变为 0, 把 0 变为 1
1>>>~22-3
5. 左位移(<<),运算数的各二进位全部左移若干位,由 <>>1<>),把 >> 左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
1>>>4>>221
更多关于运算符的知识,参考这里:https://data-flair.training/blogs/python-operators/
q 31. 在 python 中如何使用多进制数字?我们在 python 中,除十进制外还可以使用二进制、八进制和十六进制。
二进制数字由 0 和 1 组成,我们使用 0b 或 0b 前缀表示二进制数。
1>>>int(0b1010)210
2. 使用 bin() 函数将一个数字转换为它的二进制形式。
1>>>bin(0xf)2‘0b1111’
3. 八进制数由数字 0-7 组成,用前缀 0o 或 0o 表示 8 进制数。
1>>>oct(8)2‘0o10’
4. 十六进数由数字 0-15 组成,用前缀 0x 或者 0x 表示 16 进制数。
1>>>hex(16)2‘0x10’34>>>hex(15)5‘0xf’
q 32. 怎样获取字典中所有键的列表?使用 keys() 获取字典中的所有键
1>>>mydict={'a':1,'b':2,'c':3,'e':5}2>>>mydict.keys()3dict_keys(['a','b','c','e'])
q 33. 为何不建议以下划线作为标识符的开头
因为 python 并没有私有变量的概念,所以约定速成以下划线为开头来声明一个变量为私有。所以如果你不想让变量私有,就不要使用下划线开头。
q 34. 怎样声明多个变量并赋值?
一共有两种方式:
1>>>a,b,c=3,4,5#thisassigns3,4,and5toa,b,andcrespectively2>>>a=b=c=3#thisassigns3toa,b,andc
q 35. 元组的解封装是什么?
首先我们来看解封装:
1>>>mytuple=3,4,52>>>mytuple3(3,4,5)
这将 3,4,5 封装到元组 mytuple 中。
现在我们将这些值解封装到变量 x,y,z 中:
1>>>x,y,z=mytuple2>>>x+y+z
得到结果 12.
结语以上就是 python 面试中一些常见的问题及其答案。

关于12种新型电池技术科普
工业用4G路由器的优缺点
粘扣带疲劳性测试仪的详细介绍
橡胶输送带划伤的修复方法及注意事项
Altera和嵌入式联盟合作伙伴提供的处理器
Python面试中一些常见的问题及其答案
一加5什么时候上市?最新消息:一加5旗舰即将发布,真机被吐槽神似oppor11、iphone7 plus,刘作虎暗示摸完再说话!
浅析战场中的“互联网”
Spring Boot怎么通过注解来实现全局异常处理的
海信今年将成为业内首家推出XDR电视的厂商
华为笔记本在微软商店重新上架销售 并未明说库存售罄是否补货
隔离变压器的知识点汇总
比特币使用区块链技术如何交易
高通喊话苹果:禁止在中国生产和销售iPhone
美商务部批准约1/4特定厂商恢复与华为贸易
Strategy Analytics:2013年带插槽手机出
鲁大师发布了8月新发布的手机性能排行榜努比亚Z20以450040分居第一
还记得2018年Wider Challenge吗?现在结果出来啦
商业BI大数据分析系统开发可视化大屏BI大数据分析系统
电源电路中钽电容的应用选型