> For the complete documentation index, see [llms.txt](https://zihol.gitbook.io/jobs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zihol.gitbook.io/jobs/interview/python.md).

# 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的区别

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。

<br>
