什么是Python?
可以在回答中与其他语言进行对比。首先Python
是一种解释型语言。与C
语言和C
的衍生语言不同,Python 代码在运行之前不需要编译。其他解释型语言还包括PHP
和Ruby
。Python
也是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。Python
非常适合面向对象的编程,因为它支持通过组合与继承的方式定义类。 在Python
中一切皆为对象。
在回答完Python的特点后可以再说一下Python优势和劣势。
Python
代码编写快,虽然运行速度比编译语言通常要慢,但是Python
允许加入基于C
语言编写的扩展,因此我们能够优化代码,消除瓶颈,numpy
就是一个很好地例子。Python 用途非常广泛,不限于网络应用,自动化,科学建模,大数据应用等等。它也常 被用作“胶水语言”,帮助其他语言和组件改善运行状况。 同时Python 让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。
我们要明白面试官为什么提这个问题:如果你应聘的是一个Python
开发岗位,你就应该知道这是门什 么样的语言,以及它为什么这么酷。以及它哪里不好。
什么是PEP8?
PEP8
是一个编程规范,内容是一些关于如何让你的程序更具可读性的建议。
什么是pickling和unpickling?
Pickle
模块读入任何Python
对象,将它们转换成字符串,然后使用dump
函数将其转储到一个文件中,这个过程叫做pickling
。
反之从存储的字符串文件中提取原始Python
对象的过程,叫做unpickling。
Python是如何被解释的?
Python
是一种解释性语言,它的源代码可以直接运行。Python
解释器会将源代码转换成中间语言,之后再翻译成机器码再执行。
Python是怎样管理内存的?
Python
的内存管理是由私有 heap
空间管理的。所有的Python
对象和数据结构都在一个私heap
中。程序员没有访问该heap
的权限,只有解释器才能对它进行操作。 为Python
的heap
空间分配内存是由Python
的内存管理模块进行的,其核心API会提供 一些访问该模块的方法供程序员使用。Python
有自带的垃圾回收系统,它回收并释放没有被使用的内存,让它们能够被其他程序使用。
有哪些工具可以帮助debug或做静态分析?
PyChecker
是一个静态分析工具,它不仅能报告源代码中的错误,并且会报告错误类型和复杂度。Pylint是检验模块是否达到代码标准的另一个工具。
数组和元组之间的区别是什么?
数组和元组之间的区别:数组内容是可以被修改的,而元组内容是只读的。另外,元组可以
被哈希,比如作为字典的关键字。
参数按值传递和引用传递是怎样实现的?
Python
中的一切都是类,所有的变量都是一个对象的引用。引用的值是由函数确定的,因
此无法被改变。但是如果一个对象是可以被修改的,你可以改动对象。
什么是Python的命名空间?
在Python
中,所有的名字都存在于一个空间中,它们在该空间中存在和被操作,这就是
命名空间。它就好像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面寻找相应的对象。
Python中的lambda是什么?为什么lambda没有语句?
这是一个常被用于代码中的单个表达式的匿名函数。匿名函数lambda
没有语句的原因,是它被用于在代码被执行的时候构建新的函数对象并且返回。
Python中的pass是什么?
Pass
是一个在Python
中不会被执行的语句。在复杂语句中,如果一个地方需要暂时被留白, 它常常被用于占位符。
Python中的docstring是什么?
Pytho
中文档字符串被称为docstring
,它在Python
中的作用是为函数、模块和类注释生成文档。
Python 里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式
修改其中一个对象,另外一个也会修改改变)
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不
会改变)
单引号,双引号,三引号的区别
单引号和双引号是等效的,如果要换行,需要符号(\),三引号则可以直接换行,并且可以包含注释