精选的25道Python面试题和答案

Category: programming


Translation of an English article, the original link is Article Link

Python是一门高级的,解释性的,可交互的面向对象的脚本语言。它大量用英语中的重点词,而不是像其他语言一样用停顿符,而且相比更早出现的语言,它有更少的语法构成,因而Python实际上是易读的。

Python是解释性的,这一点上比较像Perl和PHP:这意味着它是在运行时被解释器处理的,而你并不需要在执行程序之前编译。

Python是可交互的:这意味着你可直接打开Python终端然后直接写程序并且看到你程序的实时的输出。

Python是面向对象的:这意味着Python支持面向对象式的编程方式,可以以对象的形式封装代码。

Python是很适合初学者的:它非常适合编程初学者学习,同时又很好的支持了各种形式的程序开发,从简单的文本处理到浏览器到游戏开发。

  1. 什么是Python?使用Python有什么好处? Python里有对象,模块,线程,异常和自动内存管理。Python非常简单易学,可移植性好,可延展性好,里面的数据结构也很丰富,而且它是开源的。

  2. 什么是PEP 8? PEP 8是一个编程范例,一套如何让自己的程序更加易读容易被理解的推荐。

  3. 什么是pickling和unpickling? Pickle模块可以接受任何Python对象并把它转换成字符串的表示形式,然后用dump函数把转化好的对象存储到文件里,这个过程就是pickling。与之相对应的,unpickling就是把存储的字符串形式的对象还原回Python的对象的过程。

  4. Python是如何被解释的? Python是解释性语言,Python程序是直接可以拿源代码来执行的。Python解释器会把程序员写的源代码先转换成一种中间的语言,然后把再转换成机器语言用来执行。

  5. Python是如何做内存管理的? Python的内存管理是在Python的私有的堆上的。所有的Python对象和数据结构都在私有堆上。程序员不能直接访问这个堆空间,解释器负责管理。 Python对象的堆内存分配是由Python的内存管理完成的。在Python的核心API中有一些工具和内存管理相关。 Python同时有内置的垃圾回收器,负责回收不再继续使用的内存并且释放内存到堆空间。

  6. 有什么工具可以帮助发现bug或者实行静态分析? PyChecker是可以用来发现Python程序中的bug并且对于不适合的编程风格和过于复杂的程序发出警告的静态分析工具。Pylint是另一款可以验证模块是否符合编程规范的工具。

  7. 什么是Python的装饰器? Python装饰器是Python语法里的用来简单方便的改变函数的一个改变。

  8. 列表和元组有什么不同? 列表是可改变的,元组不是。元组可以被哈希,因而可以用来作为字典的的key。

  9. 参数是如何被传递的?通过传值还是传引用? Python里所有的东西都是对象,所有的变量都有指向对象的引用。引用的值是根据函数的,因此你不能改变引用的值。不过你可以改变可变对象。

  10. 列表推导和字典推导是什么? 它们是一种快速简单的根据iterable创建列表或是字典的语法结构。

  11. Python提供了什么内置的数据结构? 可改变的数据结构: × 列表 × 集合 × 字典 不可改变的数据结构 × 字符串 × 元组 × 数字

  12. Python中的命名空间是什么? 在Python中,所有引入的名字都有它存在和可以被查找的空间。这就是命名空间。就像是一个大箱子,在里面变量名称可以对应到相应的对象。想要找到这个对象,要先在大箱子里找到变量名称。

  13. Python里的lambda是什么? lambda是只有一个表达式的匿名函数,常常被用作嵌入函数。

  14. 为什么Python的lambda没有声明? Python中的lambda没有声明lambda是用来创建新的函数对象并且在运行是返回的。

  15. Python中的pass是什么? pass意味着什么也不做,也就是说是用来给复合语句占位的,这样用来表示这里什么也不用做。

  16. 什么是迭代器? 在Python中迭代器是用来迭代一组元素,或者像列表一样的容器。

  17. Python中的unittest是什么? unittest是Python中的一个单元测试框架。它支持建立的共享,自动化测试,测试后的清洁,测试聚合成集合等等功能。

  18. Python的切片是什么? 切片是一种用来从像列表,元组,字符串等序列中选出一些元素的方法。

  19. Python的生成器是什么? 生成器是一种用来实现迭代器的方法。像函数一样,不过生成器产生值,而不是返回值。

  20. Python中的docstirng是什么? Python的文档字符串就是docstring。是用来给函数,类或是模块加文档的。

  21. 在Python中如何复制一个对象? 在一般情况下可以用copy.copy()或者copy.deepcopy()。绝大多数对象都可以被复制,但不是全部。

  22. Python中负数指数是什么? Python的序列可以用正数或是负数做指数。对于正指数,0是第一个指数,1是第二个指数,以此类推。对于负指数,-1是最后一个指数,-2是倒数第二个指数,以此类推。

  23. 如何把数字变成字符串? 用内置函数str()。如果你想要八进制或是十六进制的表示,那就用oct()或者hex()。

  24. xrange和range有什么区别呢? xrange返回的是xrange对象,range返回的是列表。对于xrange来说,不管范围多大,用的内存大小是一样的。

  25. Python的模块和包是什么? Python的模块是组织程序的一种方法。每个Python的文件就是一个模块,在模块中可以引入其他模块的对象或是属性。 Python程序的文件夹就是一个模块的包。一个包可以有模块或是子文件夹。