Python

python面试常问问题

1. range和xrange

都是在循环的时候使用,xrange性能更好,range是python的一个内置函数,用于生成一系列连续的证书,创建一个整数列表,一般用在for循环里面。所以其实就是能产生一组list,list是一个可迭代对象,所以可以循环。

可迭代对象就是可以直接作用于for循环的数据类型,一般是集合数据类型,包括list, tuple, dict, set, str等,另一类是generator 包括生成器和带yield(yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,这种一边循环一边计算的机制,称为生成器:generator。)的生成函数。与之类似的还有迭代器和生成器,可以用isinstance()判断一个对象是不是迭代器对象,它是可以被next()函数调用并且不断返回下一个值。生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator。把listdictstrIterable变成Iterator可以使用iter()函数:

2. python2.x 和 3.x的区别

  1. 一些2.x版本不兼容的3.x的关键字和特性可以通过使用__future__模块导入。

  2. print函数,必须用()包装想打印的对象。print在python2是一个声明,而不是一个函数调用。

  3. 整除,2.x需要加2.0,3.0之类的,除法才会得到浮点数的结果。

3. 单下划线和双下划线

  1. __func__: 一种约定,python内部的名字,用来区别其他用户自定义的命名

  2. _fun: 一种约定,用来指定变量私有,指定私有变量的一种方式,不能用from module import * 导入,只有类对象和子类对象自己能访问到这些变量。以单下划线开头的变量和函数被默认当作是内部函数。

  3. __funct: python的解析器会用_classname__funct来代替这个名字,只允许类本身访问,子类也不行,以区别和其他类相同的命名,要求名称末尾没有下划线。

4. Python的is和==

is是对比地址,是否只想同一个内存地址, == 是对比值,is比较的两个实例对象是不是完全相同,他们是不是同一个对象,占用的内存地址是否相同;==比较的是两个对象的内容是否相同,即内存地址可以不一样,内容一样就可以了。(a的引用复制给b,在内存中其实是指向了同一个对象)。is效率高,在变量和None比较时,应该用is。

Last updated