没有合适的资源?快使用搜索试试~ 我知道了~
首页2018年BAT Python面试题解析:函数传递与元类理解
2018年BAT Python面试题解析:函数传递与元类理解
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 165 浏览量
更新于2024-06-27
收藏 1.33MB PDF 举报
本文档主要围绕2018年流行的BAT公司Python面试题展开,深入探讨了Python语言的一些关键特性和概念。首先,针对函数参数传递,文章指出Python中的变量实际上代表内存中对象的引用。在函数调用时,对于不可变对象(如字符串、元组和数字)的引用,函数内部的修改不会影响外部变量,因为它们是不可更改的。相反,可变对象(如列表、字典)的引用则允许函数内部的操作改变原始对象。 其次,元类(metaclass)作为Python中的高级概念,虽然不常用,但它实际上是用于创建类的特殊类。元类在设计类的结构和行为时发挥着重要作用,帮助实现自定义类的创建和扩展机制。理解元类有助于深入理解Python面向对象编程的底层构造。 接着,文档介绍了Python中的三种方法类型:实例方法(实例绑定)、类方法(类对象绑定)和静态方法(无绑定)。实例方法通过`self`参数访问实例属性,类方法通过`cls`参数访问类本身,而静态方法不依赖任何特定的实例或类,直接通过函数名调用。通过实例`A`展示这三种方法的使用方式,可以帮助面试者理解和应用这些高级编程技巧。 这份面试题旨在测试应聘者的Python基础掌握程度,包括对数据传递模式的理解,以及对元类和特殊方法的运用能力。对于准备进入BAT等大公司工作的Python开发者来说,理解和掌握这些知识点是至关重要的,因为它们不仅关乎技术技能,还反映了对Python语言深层次特性的理解。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/87411930/bgd.jpg)
当一个内嵌函数引用其外部作作用域的变量,我们就会得到一个闭包. 总结一下,创
建一个闭包必须满足以下几点:
1. 必须有一个内嵌函数
2. 内嵌函数必须引用外部函数中的变量
3. 外部函数的返回值必须是内嵌函数
感觉闭包还是有难度的,几句话是说不明白的,还是查查相关资料.
重点是函数运行后并不会被撤销,就像 16 题的 instance 字典一样,当函数运行完
后,instance 并不被销毁,而是继续留在内存空间里.这个功能类似类里的类变量,只不
过迁移到了函数上.
闭包就像个空心球一样,你知道外面和里面,但你不知道中间是什么样.
21 lambda 函数
其实就是一个匿名函数,为什么叫 lambda?因为和后面的函数式编程有关.
22 Python 函数式编程
这个需要适当的了解一下吧,毕竟函数式编程在 Python 中也做了引用.
python 中函数式编程支持:
filter 函数的功能相当于过滤器。调用一个布尔函数 bool_func 来迭代遍历每个
seq 中的元素;返回一个使 bool_seq 返回值为 true 的元素的序列。
![](https://csdnimg.cn/release/download_crawler_static/87411930/bge.jpg)
>>>a = [1,2,3,4,5,6,7]
>>>b = filter(lambda x: x > 5, a)
>>>print b
>>>[6,7]
map 函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以 2:
>>> a = map(lambda x:x*2,[1,2,3])
>>> list(a)
[2, 4, 6]
reduce 函数是对一个序列的每个项迭代调用函数,下面是求 3 的阶乘:
>>> reduce(lambda x,y:x*y,range(1,4))
6
23 Python 里的拷贝
引用和 copy(),deepcopy()的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象 a
a[4].append('c') #修改对象 a 中的['a', 'b']数组对象
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
输出结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
![](https://csdnimg.cn/release/download_crawler_static/87411930/bgf.jpg)
20
d = [1, 2, 3, 4, ['a', 'b']]
24 Python 垃圾回收机制
Python GC 主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用
计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的
循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法
提高垃圾回收效率。
1 引用计数
PyObject 是每个对象必有的内容,其中 ob_refcnt 就是做为引用计数。当一个对
象有新的引用时,它的 ob_refcnt 就会增加,当引用它的对象被删除,它的
ob_refcnt 就会减少.引用计数为 0 时,该对象生命就结束了。
优点:
1. 简单
2. 实时性
缺点:
1. 维护引用计数消耗资源
2. 循环引用
![](https://csdnimg.cn/release/download_crawler_static/87411930/bg10.jpg)
2 标记-清除机制
基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,
遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然
后清扫一遍内存空间,把所有没标记的对象释放。
3 分代技术
分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,
每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,
存活时间通常利用经过几次垃圾回收来度量。
Python 默认定义了三代对象集合,索引数越大,对象存活时间越长。
举例:
当某些内存块 M 经过了 3 次垃圾收集的清洗之后还存活时,我们就将内存块 M 划
到一个集合 A 中去,而新分配的内存都划分到集合 B 中去。当垃圾收集开始工作时,
大多数情况都只对集合 B 进行垃圾回收,而对集合 A 进行垃圾回收要隔相当长一段
时间后才进行,这就使得垃圾收集机制需要处理的内存少了,效率自然就提高了。
在这个过程中,集合 B 中的某些内存块由于存活时间长而会被转移到集合 A 中,当
然,集合 A 中实际上也存在一些垃圾,这些垃圾的回收会因为这种分代的机制而被
延迟。
25 Python 里面如何实现 tuple 和 list 的转换?
剩余78页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/5d3d17b770eb4c6785682f01b138d5bc_z9894.jpg!1)
悠闲饭团
- 粉丝: 182
- 资源: 3378
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)