python必刷面试_Python面试必刷题系列(5)
本篇是【Python面试必刷题系列】的第5篇文章。通过收集、整理Python真实面试题,给大家讲解面试中的python高频考察点,希望能够引起读者的足够重视。
往期回顾:
Python中 is 和 == 有什么区别?
(1)==是比较运算符,用来比较两个对象的value(值)是否相等。
(2)is也叫做同一性运算符,用来比较对象间的唯一身份标识(id)是否一致。
请看示例:
a = b = "abc"X = "abc"print a == b # Trueprint a == X # Trueprint a is b # Trueprint a is X # Truea = b = [1, 2, 3]X = [1, 2, 3]print a == b # Trueprint a == X # Trueprint a is b # Trueprint a is X # False
结论:只有数值型和字符串型比较,a is X才为True,当是tuple,list,dict或set型时,a is X为False。
原因:id(a) != id(X),感兴趣的同学可以试一下。
列举sort 和 sorted 的区别
sort 只是应用在 list 上的方法,就地排序,无返回值。
sorted 是内建函数,对所有可迭代的对象都可进行排序,返回新的list。
sorted 语法:
sorted(iterable, key=None, reverse=False)
参数说明:
iterable -- 可迭代对象。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
什么是猴子补丁?
在运行期间动态修改一个类或模块,叫做猴子补丁(Monkey Patch)。
用法一:运行时动态替换模块的方法
class Person(object): def speak(self): print "oooooo"def speak_patch(self): print "eeeeee"if __name__ == '__main__': Person.speak = speak_patch person = Person() person.speak() # 输出是 “eeeee”,相当于临时替换了模块里的方法
用法二:运行时动态增加模块的方法
这种场景也比较多,比如我们引用团队通用库里的一个模块,又想丰富模块的功能,除了继承之外也可以考虑用Monkey Patch。
成员变量用单、双下划线修饰的区别?
(1)
_xxx : 保护型成员变量,只允许该类及其子类访问;不能用于from module import * 。
(2)
__xxx : 私有型成员变量,只允许该类本身进行访问,连子类也不允许。
(3)
__xxx__ : python内置的专用特殊方法。像__init__()之类
的。
说说lambda表达式的应用场景?
lambda 表达式的本质就是匿名的、函数体仅有一行的函数。
# lambda表达式lambda x , y : x + y# 改写成函数def add(x, y): return x+ y
虽然函数比 lambda 表达式的适应性更强,能够创建复杂的函数对象,但 lambda 表达式依然有如下两个优点:
对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁。
对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高了性能。
例子如下:
a = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]a_1 = list(map(lambda x: x[0], a))
copy 和 deepcopy 的区别是什么?
结论:
浅拷贝,只拷贝父对象,不会拷贝父对象内部的子对象。
深拷贝,既拷贝父对象,又拷贝各级子对象。
理解:
import copyorigin = [1, 2, [3, 4]] # origin 里边有三个元素:1, 2,[3, 4]cop1 = copy.copy(origin)cop2 = copy.deepcopy(origin)print cop1 == cop2 # Trueprint cop1 is cop2 # False# 说明: cop1 和 cop2 目前看上去还相同,但已不再是同一个objectorigin[2][0] = "hey!"origin[0] = "a"print origin # ['a', 2, ['hey!', 4]]print cop1 # [1, 2, ['hey!', 4]]print cop2 # [1, 2, [3, 4]]# 说明: origin第一层元素改变,对深浅拷贝都不会有影响;# 但是子对象(origin[2] = [3, 4])发生改变后,浅拷贝会跟着变,深拷贝却不受影响
也就是说,如果父元素的第一层中存在可变对象,如list、dict以及普通类的实例对象等,使用浅拷贝只是传递了可变对象的引用,而深拷贝才是通俗理解上的完全复制。
下面是在普通类实例上做的一组测试,感兴趣的同学可以继续看,结论与上面一致。
import copyclass OBJ(object): X = [1, 2, [1, 2]] # 类变量 def __init__(self): self.x = [1, 2, [1, 2]] # 实例变量# 深浅拷贝origin = OBJ()cop1 = copy.copy(origin)cop2 = copy.deepcopy(origin)# 改变实例对象的属性origin.x[0] = "**"origin.x[2][1] = "##"print cop1.x # ['**', 2, [1, '##']]print cop2.x # [1, 2, [1, 2]]# 改变类变量的属性origin.X[0] = "**"origin.X[2][1] = "##"print cop1.X # ['**', 2, [1, '##']]print cop2.X # ['**', 2, [1, '##']]
什么是断言?应用场景?
python的assert是用来检查一个条件,如果它为真,继续往下执行。如果它为假,则会抛出AssertError 错误信息,并终止执行程序。
例如:
x = 23assert x > 0, "x is not positive"assert x%2 == 0, "x is not an even number"
结果显示:
Traceback (most recent call last): File "/Users/arrnos/PycharmProjects/wechat/interface.py", line 3, in assert x%2 == 0, "x is not an even number"AssertionError: x is not an even number
断言是保证程序运行可靠性的一种方式,因为,在条件不符合我们预期时,程序会自动在断言处终止运行,同时会抛出错误所在的代码行和相关信息,也算是一种程序问题定位的手段。
具体应用场景:函数入参检查、运行时程序逻辑检查、约定检查、程序常量以及文档检查等。
详细可参考:https://www.cnblogs.com/zhuifeng-mayi/p/9248558.html
dir()是做什么的?
dir()是python的一种内置函数,dir(object)用于查看object内部的全部属性和方法。
比如查看list、字符串或者是os模块的全部内部函数和方法,可以这样:
print dir(os)print dir(list)print dir("")print dir(str) # 和上面运行结果一致
*args和 * *kwargs 的含义及用法。
在函数定义中使用 *args 和**kwargs传递可变长参数。 *args用来将参数打包成 tuple 给函数体调用。** kwargs用于将关键字参数打包成 dict 给函数体调用。
(1) *和**的用法:拆包
def fun1(a, b): print a, bdef fun2(b, a): print a, bfun1(*[1, 2]) # *用于拆解list或元组,拆解结果作为位置参数fun2(**{"a": 1, "b": 3}) # **用于拆解字典,并将其作为关键字参数
结果:
1 21 3
(2) *args 用法实例:
*args用于接收元组作为位置参数。
def fun(a, *args): print a print "args:", args print "type(args):", type(args) for arg in args: print arg# 调用fun(1, 2, 3)
结果:
1args: (2, 3)type(args): 23
(3)**kwargs用于接收字典类型的参数
def fun(a, **kwargs): print "a is ", a print "kwargs:", kwargs print "type(kwargs):", type(kwargs) print "b is ", kwargs.get("b", None) print "c is ", kwargs.get("c", None) print "d is ", kwargs.get("d", None)# 调用fun(1, b=3, c=5)
结果:
a is 1kwargs: {'c': 5, 'b': 3}type(kwargs): b is 3c is 5d is None
type、class和object之间的关系?
(1) type : 用来返回一个对象的类型
(2) object
由于Python中一切皆对象,也就是说Python中的任何变量类型都是可以被修改的,这也是Python等动态编程语言的特点。type的基类是object,但是object也是由type生成的,他们之间形成了一个环路,这样设计的目的也就是为了方便对这些数据结构进行修改。
(3) class
class是用来描述一个类对象的,通过class可以实例化出一个对象。
(4) type,class,object三者之间的关系:
比心
❤
推荐阅读:
【算法研习社】
机器学习、数据挖掘、推荐系统、架构编程
海量干货,持续发送
大厂内推、技术资料获取,加小编微信,拉你进
【算法研习社 - 交流群】
python必刷面试_Python面试必刷题系列(5)相关推荐
- python的celery的面试_Python面试经验总结,面试一时爽,一直面试一直爽!
前言:这是一位好友最近对Python岗位面试后的一篇经验之谈,从Python岗位需求到Python就业方向都有,很有借鉴意义 Python学习交流群:835017344,这里是python学习者聚集地 ...
- python面试中的8个必考问题_Python 面试中 8 个必考问题,值得收藏!
最近有好多小伙伴问我:"python面试的时候都会问什么问题?",今天北大青鸟给小伙伴分享一些大厂公司面试Python工程师的题目和经历,希望对广大Python工程师的求职者有一个 ...
- python深浅拷贝 面试_Python面试宝典之基础篇-02
原标题:Python面试宝典之基础篇-02 我觉得你如果正在找工作,我的Python面试宝典几期教程,你一定得花时间看完了! 题目006:说说Python中的浅拷贝和深拷贝. 点评:这个题目本身出现的 ...
- 面试python说会为什么_Python面试必须要看的15个问题
问题1 到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做). 答案 为什么提这个问题: 如果你应聘的是一个Python开发岗位,你就应该知道这是门什么样的语言,以及它为什么这么酷 ...
- python数据结构面试_python面试的3大重点,让你顺利拿到offer
5月已经过去大半个月了,马上就要迎来毕业季了,你准备好去面试了么? W3C咨询了不少python爬虫岗位从业者,如果你也打算从事python爬虫岗位,掌握这三个重点,能让你更顺利的get到理想的off ...
- python 只循环目录_Python面试题目,掌握他们令你更上一层楼!附答案
1. Python中的标识符长度能有多长? 在Python中,标识符可以是任意长度.此外,我们在命名标识符时还必须遵守以下规则: 1. 只能以下划线或者 A-Z/a-z 中的字母开头 2. 其余部分可 ...
- python项目面试_Python面试中最常见的25个问题-结束
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 13)Python中的lambda表达式是什么? lambda表达式是一个匿名函数,通常用作代码行内的嵌入函数. 14)为什么Python中的lambda ...
- python的celery的面试_python 面试
为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? Python解释器种类以及特点? 位和字节 ...
- python正则表达式面试_Python面试 Re-正则表达式
1.python正则表达式中匹配(match)和查找(search)的区别 答:正则表达式中match和search的方法比较相似 相同点:都是在一个字符串s中寻找pat子字符串,如果能找到,就返回一 ...
最新文章
- 关于火狐中ashx中输出javascript一闪而过的问题
- Hadoop视频教程6折 低达4.5折
- chromedriver 下载_centos7中配置python爬虫selenium+chromium+chromedriver环境
- SRV记录注册不成功的可能的原因
- centos6.x 安装php5.6 tar,CentOs6.x安装php5.6.x Web程序 - 贪吃蛇学院-专业IT技术平台
- Redhat Enterprise Linux 5系统引导故障解决方法
- 如何在使用 Spotify 时更好地保护您的隐私?
- JAVA面向对象中继承子父类构造函数-子类的实例化过程-图解
- oracle常用数据字典 表,Oracle数据库中常用的数据字典表和视图
- 微信公众号敏感词检测工具
- pdf文件过大如何缩小但保证清晰度
- MATLAB运行程序后workspace是空的
- CVPR 2018 微表情识别论文
- 11.Null和Underfined
- 怎么利用shell批量把图片改名(数字排序)
- MySQL8.0.17 - Multi-Valued Indexes 简述
- Spring中的@Scheduled
- JAVA版微信支付V3—JSAPI支付
- Qt实现二维码的编解码
- 无服务器计算:云计算的下一阶段
热门文章
- 初识python评课稿_开平方函数 python
- linux重命名的命令行操作,Linux rename命令批量重命名的方法
- 文件系统_Docker文件系统实战
- cat命令读取一部分_脚本攻略2 --命令之花
- vs python opencv配置_python如何配置opencv
- jsonp react 获取返回值_谈谈对 React 新旧生命周期的理解
- android屏幕适配详解
- [转载]宇宙文明等级的划分标准
- poj 1087 A Plug for UNIX 【最大流】
- EJB3.0开发环境的搭建