python 问答

1、list和tuple有什么区别?

list是可变的,可以添加list.append,可以插入list.insert,可以改变元素值list[2] ='a';而tuple在初始化的时候就确定了,不能改变,代码更加安全

2、什么是生成器?

在Python中,这种一边循环一边计算的机制,称为生成器:generator。generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

3、什么是装饰器?@property

把一个函数当做参数然后返回一个替代版函数。Wrapper就是一个装饰器,输入是add,将add装饰成了add的增强版函数
add = wrapper(add)等价于
@wrapper
def add():

4、set和List

set的存储结构是哈希表,保存的是对象的哈希值,保存的顺序是由HashCode值决定,并不一定按照我们新建对象顺序保存的而是按照哈希值的大小顺序存的,就是说哈希值在表中是由顺序的,而这个顺序与新建对象的顺序是没有关系的。

5、__new__ 和__init__的区别

1)__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。
也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。
2)__new__方法会返回所构造的对象,__init__则不会。__init__无返回值。

6、邮箱正则表达式

^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
只允许英文字母、数字、下划线、英文句号、以及中划线组成

7、range和xrange的区别

range返回的是一个List对象,而xrange返回的是生成器,所以xrange做循环的性能比range好,尤其是返回很大的时候。尽量用xrange吧,除非你是要返回一个列表。目前的Python3.5版本中range返回的是个生成器,兼容了xrange的功能

原文地址:https://www.cnblogs.com/xqn2017/p/8029491.html