10 个高频 Python 面试题
Python 很容易学会,但很难掌握。
你可以在几天内了解它的基本语法,但是要能够用 Python 开发出足够好的商业软件,多年的实践是必须的。
因为,无论你使用哪种编程语言,你都必须对其复杂的内部机制有足够的了解,才能写出健壮的程序。
本文分享 10 个针对高级开发人员的 Python 面试题。它可以测试你对 Python 内部机制理解的程度。
一、Python中的整数缓存机制
面试官:
请解释在 Python shell 解释器上执行的代码的以下结果:
>>> a=256
>>> b=256
>>> a is b
True
>>> x=257
>>> y=257
>>> x is y
False
回答:
这是因为 Python 中的整数缓存机制。为了节省时间和内存成本,Python 总是预先加载 [-5, 256] 范围内的所有小整数。
因此,[-5, 256] 中的所有整数都已经保存在内存中。当声明此范围内的新整数变量时,Python 只是将缓存的整数引用到它,不会创建任何新对象。
因此,对结果的解释是:
当变量 a 和 b 分配给 256 时,它们被引用到存储 256 的相同内存位置。他们指向同一个对象。
当变量 a 和 b 被分配给 257 时,它们是不同内存位置的两个不同对象,因为 257 不在小整数缓存范围内。
由于 is 运算符要比较两个变量的内存位置,a is b 应该输出 True ,x is y 应该输出 False。
二、如何避免嵌套循环
面试官:
下面的程序使用了嵌套循环,你将如何优化它?
list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]for a in list_a:for b in list_b:for c in list_c:if a + b + c == 2077:print(a, b, c)
# 70 2000 7
回答:
可以使用 itertools 中的 product 函数对其进行优化:
from itertools import productlist_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]for a, b, c in product(list_a, list_b, list_c):if a + b + c == 2077:print(a, b, c)
# 70 2000 7
因为 product 函数生成输入迭代的笛卡尔积。它可以帮助我们在很多场景中避免嵌套循环。
三、 类方法和静态方法
面试官:
在 Python 类中,类方法和静态方法有什么区别?
回答:
类方法是 Python 类中的第一个参数是类本身的方法。我们用 cls 这个参数来表示。
类方法不仅可以由实例调用,也可以由类直接调用。
静态方法是 Python 类中没有类或实例参数的方法。
因为静态方法不包含有关特定类或实例的参数。我们可以将其定义为类外的独立函数,并将其用作类外的其他普通函数。
四、eval 函数的使用
面试官:
能否用一行 Python 代码中实现一个函数,它将接收两个数字 a 和 b 一个字符串 op。op 代表算术运算符,例如 “+”、“-”、“*”和“/” 。函数需要返回 op 的计算结果 a op b。
回答:
def cal(a, b, op): return eval(f'{a} {op} {b}')
面试官:
好!那你能谈谈 eval 函数的缺点,以及为什么它不适合在生产中使用吗?
回答:
在生产环境中,我们应该仔细检查用户输入以避免意外问题。eval 函数会立即执行输入,这可能造成远程代码执行,这是非常危险的,强烈建议不要在生产环境使用 eval,即使你做了很多安全检查。
五、抽象类
面试官:
在面向对象编程中,有一个概念叫做抽象类。Python 也支持抽象类吗?
回答:
支持。Python 标准库有个模块 abc,它为抽象类提供功能。
通过继承类 abc.ABC,可以将类定义为抽象类,借助于装饰器 abc.abstractmethod,我们可以将方法定义为抽象方法。
例如:
from abc import ABC, abstractmethodclass Animal(ABC):@abstractmethoddef move(self):pass
六、函数传参的机制
面试官:
Python 是按值还是按引用传参?
回答:
既不是按值传递,也不是按引用传递,Python 自有一套机制,我们都知道 Python 的世界里,万物皆对象,从这个方面讲,传递给函数的,都是对象的地址,这有点像引用的概念,但是 Python 的对象分为可变对象和不可变对象,不可变对象就是不可修改的对象,例如:数字、字符串、元组,在不可变对象上的自增操作会新创建一个对象。
如果从其他编程语言过来学 Python 的,可以简单的这么理解:对于不可变对象,是按值传递,函数内部不会修改不可变对象,对于可变对象,是按引用(地址)传递,函数内部的修改会影响到参数本身。
七、Python 中的垃圾回收
面试官:
Python 如何收集垃圾(无用的对象)?
回答:
Python 使用一种称为引用计数的方法来决定何时需要在内存中收集对象。
简单来说,Python 会计算每个对象的引用计数,当一个对象没有引用时,会自动收集。
八、在 Python 函数中接收无限数量的参数
面试官:
请解释函数参数中星号的以下用法:
def func(*args, **kwargs):pass
回答:
按照惯例,如果无法清楚地确定其参数的数量,我们会像示例一样定义一个 Python 函数。
以单个星号为前缀的参数 args 表示可以将任意数量的位置参数保存到元组中,args 就是这个元组的名称。
以两个星号为前缀的参数 kwargs 表示可以将任意数量的位置参数保存到字典中,kwargs 就是这个字典的名称。
九、 Lambda 函数
面试官:
Python 中的 lambda 函数是什么?你能否提供一个利用 lambda 函数强大功能的示例?
回答:
lambda 函数,或称为匿名函数,是一个没有函数名的简单 Python 函数。
编写 lambda 函数的模板是:
lambda 参数:表达式
使用它的一个很好的场景是 sort 函数,比如:
leaders = ["Warren Buffett", "Yang Zhou", "Tim Cook", "Elon Musk"]
print(leaders)
# ['Warren Buffett', 'Yang Zhou', 'Tim Cook', 'Elon Musk']
leaders.sort(key=lambda x: len(x))
print(leaders)
# ['Tim Cook', 'Yang Zhou', 'Elon Musk', 'Warren Buffett']
十、Python 中的一些推导式
面试官:
Python中的推导式是什么?
回答:
推导式技巧是 Python 中的语法糖。它可以帮助轻松生成特定的数据结构。Python 中有四种类型的推导式:
列表推导式
生成器推导式
集合推导式
字典推导式
例如,我们可以如下生成字典:
Entrepreneurs = ["Yang", "Mark", "steve", "jack", "tom"]
D1 = {id: name for id, name in enumerate(Entrepreneurs) if name[0].isupper()}
print(D1)
# {0: 'Yang', 1: 'Mark'}
学习更多Python知识与技巧,关注与私信博主(888)!
热爱学习和渴望进阶的小伙伴,各种Python学习路线、笔记、面试题,免费分享!
10 个高频 Python 面试题相关推荐
- 10道python面试题,每题10分,你能的多少分!(内附python教程)
image.png 1.一行代码实现1–100之和 10道python面试题,每题10分,你能的多少分! 2.简述面向对象中new和init区别 init是初始化方法,创建对象后,就立刻被默认调用了, ...
- python面试题搜集
1. Python面试题搜集(一) 2019 Python最新面试题及答案16道题吐血总结!50道Python面试题集锦(附答案) Python是目前编程领域最受欢迎的语言.在本文中,我将总结Pyth ...
- Python面试题大全总结
一.前言 有很多时候,你可能python使用的很熟练,但在面试的时候可能就过不了, 毕竟常说的面试造火箭,入职拧螺丝的情况是真实存在的.所以背八股文也是极其重要的! 这里分享一些常见和高频的面试题(3 ...
- python面试题库知乎_知乎面试题刷题
2.js闭包是什么? function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result ...
- 史无前例的这个 GitHub 汇总了 300 道 Python 面试题
对于机器学习算法工程师而言,是不可或缺的语言,它的优美与简洁令人无法自拔.那么你了解过Python编程面试题吗?从Python基础到网页爬虫你是否能全方位Hold住?今天,机器之心为读者们推荐一个Gi ...
- 尚硅谷-互联网大厂高频重点面试题 (第2季)JUC多线程及高并发
本期内容包括 JUC多线程并发.JVM和GC等目前大厂笔试中会考.面试中会问.工作中会用的高频难点知识. 斩offer.拿高薪.跳槽神器,对标阿里P6的<尚硅谷_互联网大厂高频重点面试题(第2季 ...
- Python二级试题(一)
第一套试题 关于数据的存储结构,以下选项描述正确的是 A 数据所占的存储空间量 B 数据在计算机中的顺序存储方式 C 数据的逻辑结构在计算机中的表示 D 存储在外存中的数据 正确答案: C 关于线性链 ...
- 力扣高频|算法面试题汇总(七):树
力扣高频|算法面试题汇总(一):开始之前 力扣高频|算法面试题汇总(二):字符串 力扣高频|算法面试题汇总(三):数组 力扣高频|算法面试题汇总(四):堆.栈与队列 力扣高频|算法面试题汇总(五):链 ...
- 测试工程师python常见面试题_测试人员python面试题
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但 ...
最新文章
- mysql存放图片的数据表_mysql数据库可以存图片吗?
- 计算机用word做贺卡,Word技巧:用word制作电子贺卡,你会吗?
- 织梦调用css的标签,织梦dede常用的调用标签(个人总结)
- selenium python 安装
- Mybatis查询传递单个参数和传递多个参数用法
- Sentinel 成为 Spring Cloud 官方推荐的主流熔断降级方案
- MySQL详细安装(windows)
- codevs 4650 破损的键盘(链表)
- windows 安装mongodb
- [技术分享]【DLI跨源】当DLI遇见MongoDB
- 《如何搭建小微企业风控模型》第十一节 逻辑回归与评分卡 节选
- 斯坦福大学机器学习相关网站——Andrew Ng
- vue 子组件给父组件传值
- 为什么苹果Mac的初始用户不在“/etc/passwd”文件中?
- linux系统下文件误删除该如何恢复?
- Android Studio中运行Android模拟器
- AtCoder Beginner Contest 275 A-D题解
- Advanced Algorithm 听课笔记(Useful Inequalities Balls and Bins)
- BlueCoat ProxySG配置FTP代理
- js会员头像上传拖动处理头像类
热门文章
- win7用什么浏览器好
- Webpack5中CSS处理(单独文件、兼容及压缩)
- 省市区三级联动vue elelment
- vmware详细安装教程
- mpvue+小程序云开发,纯前端实现婚礼邀请函
- 程序员接私活怎样防止做完了不给钱?
- Netty版本升级血泪史之线程篇
- android平板应用程序,分享Android平板电脑上开发应用程序不能全屏显示的问题解决...
- 计算机丢失qt5xml.dll,qt5xml.dll文件
- 转载:运用MQTT-JMeter插件测试MQTT服务器性能