Python面试过程中可能会被问到的问题
1 . 单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
__new__()在__init__()之前被调用,用于生成实例对象。利用这个方法和类的属性的特点可以实现设计模式的单例模式。单例模式是指创建唯一对象,单例模式设计的类只能实例 这个绝对常考啊.绝对要记住1~2个方法,当时面试官是让手写的.
1 使用__new__方法
![](https://img.haomeiwen.com/i25138121/6d4e8b54a1378210.png)
2 共享属性
创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.
![](https://img.haomeiwen.com/i25138121/656140980b25ac4e.png)
3 装饰器版本
![](https://img.haomeiwen.com/i25138121/4a95cca707f82df5.png)
4 import方法
作为python的模块是天然的单例模式
![](https://img.haomeiwen.com/i25138121/ec07bc3e885ef4f3.png)
2.Python函数式编程
这个需要适当的了解一下吧,毕竟函数式编程在Python中也做了引用.
推荐: 酷壳
python中函数式编程支持:
filter 函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。
![](https://img.haomeiwen.com/i25138121/4b957935ae5dd196.png)
map函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以2:
![](https://img.haomeiwen.com/i25138121/e271cc647f8166f3.png)
reduce函数是对一个序列的每个项迭代调用函数,下面是求3的阶乘:
![](https://img.haomeiwen.com/i25138121/56d7dc47da29f7ef.png)
3. Python里的拷贝
引用和copy(),deepcopy()的区别
![](https://img.haomeiwen.com/i25138121/9a1faee15b7e6c57.png)
4. 闭包
闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。
当一个内嵌函数引用其外部作作用域的变量,我们就会得到一个闭包. 总结一下,创建一个闭包必须满足以下几点:
1.必须有一个内嵌函数
2.内嵌函数必须引用外部函数中的变量
3.外部函数的返回值必须是内嵌函数
感觉闭包还是有难度的,几句话是说不明白的,还是查查相关资料.
重点是函数运行后并不会被撤销,这个功能类似类里的类变量,只不过迁移到了函数上.
闭包就像个空心球一样,你知道外面和里面,但你不知道中间是什么样.
自学Python的一些资料和理解可以分享,需要斯我。
![](https://img.haomeiwen.com/i25138121/43837f437fdd5b1b.jpg)