学习编程
首发于学习编程
常见面试题整理--Python代码篇

常见面试题整理--Python代码篇

希望此文可以长期更新并作为一篇Python的面试宝典。每一道题目都附有详细解答,以及更加详细的回答链接。此篇是代码篇,上一篇是:Python概念篇 两者结合效果更佳。

喜欢听音乐的猿们,欢迎关注我最近新开的专栏:音乐推荐-知乎专栏

(一)、如何反序的迭代一个序列?

(二)、 如何用Python来进行查询和替换一个文本字符串?

(三)、使用Python实现单例模式。

所谓单例就是一个类从始至终只能产生一个实例。

方法一:使用__new__方法

__new__方法中把类实例绑定到类变量_instance上,如果cls._instanceNone表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls_instance

方法二:使用装饰器(decorator)

方法三:使用__metaclass__(元类)

方法四:共享属性

所谓单例就是所有的引用(实例,对象)拥有相同的属性和方法,同一个类的实例天生都会有相同的方法,那我们只需要保证同一个类所产生的实例都具有相同的属性。所有实例共享属性最简单直接的方法就是共享__dict__属性指向。

方法五:Python模板

(四)、重新实现str.strip(),注意不能使用string.*strip()

(五)、 阅读下面的代码,它的输出结果是什么?(super

想要更佳详细的了解有关于super,点击这里:python super() - 漩涡鸣人 - 博客园

(六)、Python的函数参数传递

关于以上代码:Pythonstring、tuple、number属于不可更改对象,而listdict属于可修改对象。

(七)、类变量和实例变量

类变量就是供给类使用的变量,实例变量就是供给实例使用的变量。看以下代码

  • 上半部分:name是字符串(不可更改对象),实例变量p1.name一开始指向了类变量name="aaa",但是在实例的作用域把类变量的引用改变了,就变成了一个实例变量self.name不再引用Person的类变量name
  • 下班部分:namelist(可更改对象)

(八)、Python在函数式编程方面的支持。

方面一:lambda表达式:体现原理就是python允许lambda关键字创建匿名函数,所谓匿名就是python不会创建名称空间,lambda表达式返回可调用的函数对象,这些都符合函数式编程的思想。

方面二:内建函数:filter()、reduce()、map()

有关于三个内建函数的详细解答,请点击这里:Python 函数式编程 - BeginMan - 博客园

(九)、 以下代码将输出什么?(考察list

可能你会问:why?为什么它没有报错:是的,它不会报错。试图访问一个列表的以超出列表成员数作为开始索引的切片将不会导致IndexError,并且仅仅返回一个空list

(十)、 以下代码将输出什么?(考察)

这个原因是Python的闭包的后期绑定导致的late binding。这意味着在闭包中的变量是在内部函数被调用的时候被查找。所以结果是,当任何的testFun()返回的函数被调用,在那时,i的值是在它被调用时的周围作用域中查找,到那时,无论哪个返回的函数被调用,for循环已经完成,i的最后值是3,因此每个返回的函数testFun的值都是3。

更详细的解答可以看这里:Python中后期绑定(late binding)是什么意思?

本文参考文献资料:

「1」七、PYTHON 一些基础面试题目总结

「2」Python单例模式的4种实现方法

「3」python 面试题 - 知识点整理

「4」很全的 Python 面试题 - Python - 伯乐在线

「5」Python 函数式编程 - BeginMan - 博客园


学习编程,欢迎关注专栏:学习编程 - 知乎专栏
编辑于 2017-05-23

文章被以下专栏收录

    微信公众号:牛客网 莫道君行早,更有早行人。 全心敲代码,天道自酬勤。