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
对象,但list
、dict
、str
虽然是Iterable
,却不是Iterator
。把list
、dict
、str
等Iterable
变成Iterator
可以使用iter()
函数:
2. python2.x 和 3.x的区别
一些2.x版本不兼容的3.x的关键字和特性可以通过使用
__future__
模块导入。print函数,必须用()包装想打印的对象。print在python2是一个声明,而不是一个函数调用。
整除,2.x需要加2.0,3.0之类的,除法才会得到浮点数的结果。
3. 单下划线和双下划线
__func__
: 一种约定,python内部的名字,用来区别其他用户自定义的命名_fun
: 一种约定,用来指定变量私有,指定私有变量的一种方式,不能用from module import *
导入,只有类对象和子类对象自己能访问到这些变量。以单下划线开头的变量和函数被默认当作是内部函数。__funct
: python的解析器会用_classname__funct
来代替这个名字,只允许类本身访问,子类也不行,以区别和其他类相同的命名,要求名称末尾没有下划线。
4. Python的is和==
is是对比地址,是否只想同一个内存地址, == 是对比值,is比较的两个实例对象是不是完全相同,他们是不是同一个对象,占用的内存地址是否相同;==比较的是两个对象的内容是否相同,即内存地址可以不一样,内容一样就可以了。(a的引用复制给b,在内存中其实是指向了同一个对象)。is效率高,在变量和None比较时,应该用is。
Last updated