1. 谈谈对 Python 和其他语言的区别
答:
Python 是一门强类型的可移植、可扩展、可嵌入的解释型编程语言,属于动态语言;其语法简洁优美、功能强大无比、应用领域非常广泛且具有强大完备的第三方库。
(注:语言有无类型,弱类型和强类型三种。强类型指的是程序中表达的任何对象所从属的类型都必须能在编译时刻确定。常见的强类型语言有C++、Java、Apex和Python等。)
拿 C 语言和 Python 比: Python 的第三方类库比较齐全并且使用简洁,很少代码就能实现一些功能,如果用 C 去实现相同的功能可能就比较复杂。
但是对于速度来说 Python 的运行速度相较于 C 就比较慢了。所以有利的同时也有弊端,毕竟我们的学习成本降低了。
2. 简述解释型和编译型编程语言
答:
编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码,一次性“翻译”成可被该平台硬件执行的机器语言(包括机器指令和操作数),并包装成该平台所能识别的可执行程序的格式,这个转换过程称为编译(Compile)。
编译生成的可执行程序可以脱离开发环境,在特定的平台上独立运行
解释型语言是指使用专门的解释器,将源程序逐行解释成特定平台的机器代码并立即执行的语言。
解释型语言通常不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时完成。
可以这样认为,每次执行解释型语言的程序都需要进行一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释型语言有一个优势,就是跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器都负责将源程序解释成特定平台的机器指令。
也就是说,解释型语言可以方便地实现源程序级的移植,但这是以牺牲程序执行效率为代价的。
编译型语言和解释型语言的对比如图所示。
不难理解,编译型语言和解释型语言的区别在于,编译是对高级语言程序进行一次性翻译,这样的好处是,一旦源程序被彻底翻译,它就可以重复运行,且今后都不再需要编译器和源代码;而如果使用解释器,则高级语言程序每次运行,都需要借助源程序和解释器,其最大的好处就是,程序有很好的可移植性。
3. Python 的解释器种类以及相关特点?
答:
CPython–c 语言开发的,使用最广的解释器
IPython–基于 cPython 之上的一个交互式计时器,交互方式增强功能和 cPython 一样
PyPy–目标是执行效率,采用 JIT 技术。对 Python 代码进行动态编译,提高执行效率
JPython–运行在 Java 上的解释器,直接把 Python 代码编译成 Java 字节码执行
IronPython–运行在微软 .NET 平台上的解释器,把 Python 编译成 . NET 的字节码。
4. Python3 和 Python2 的区别?
答: 这里例举 5 条
print 在 Python3 中是函数,必须加括号;Python2 中 print 为 class。
Python2 中使用 xrange,Python3 使用 range。
Python2 中默认的字符串类型是 ASCII,Python3 中默认的字符串类型是 Unicode。
Python2 中/的结果是整型,Python3 中是浮点类型。
Python2 中声明元类:metaclass = MetaClass, Python3 中声明元类:class newclass(metaclass=MetaClass):pass。
5. Python3 和 Python2 中 int 和 long 区别?
答:
Python2 有 int 和 long 类型。int 类型最大值不能超过 sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比 int 类型表示的数字范围更大。
在 Python3 里,只有一种整数类型 int,大多数情况下,表示为长整型,没有 python2 中的 Long。和 Python2中的长整型类似。
6. xrange 和 range 的区别?
答:
首先得说明一下,只有在python2中才有xrange和range,python3中没有xrange,并且python3中的range和python2中的range有 本质的区别。所以这儿说的range和xrange的区别是只针对python2的。
在py2中,range得到的是一个列表,即
x = range(0, 5)
print(type(x)) # 打印x的类型,结果是list
print(x) # 结果是[0,1,2,3,4]
xrange得到的是一个生成器对象, 即
x = xrange(0, 5)
print(type(x)) # 输出类型,结果为一个生成对象
print(x) # 输出x, 结果为xrange(0,5)
那么,python3中为什么没有了range了呢(额,这个怎么描述呢,是有range,但是这个range其实是py2中的xrange,而不是range),因为使用生成器可以节约内存。比如现在有个代码是for i in range(0, 10000),如果还是使用py2中的range的话,那么就会得到一个0到9999的一个列表,这个将会占用很大的空间,但是使用生成器的话,不需要一上来就开辟一块很大的内存空间,会节省很大的资源。