1)python生成器和迭代器的区别
迭代器协议访问对象,先调用对象中的__iter__方法,提供next方法返回下一项,如果没有的话则去找__getitem__方法。没有下一项回抛出StopIterration的异常
生成器,python中使用了yield的函数成为生成器,生成器函数返回一个迭代器。在调用生成器运行的过程中,每次遇到yield时函数高会暂停并保存当前所有运行的信息。返回yield的值,并在下次执行next()方法时从当前位置继续执行。
在python中:列表、元组、字典、字符串可以迭代。
区别:1.迭代器是访问容器的一种方式,也就是说容器已经出现,我们是从已有的元素中拓印出一份副本,只为我们此次迭代使用。而生成器则是自己生成元素。2.在使用方法上,生成器只需要简单函数写法,配合yield实现,生成器是只能遍历一次的。
为什么使用生成器:1.节省资源。2.生成器随用随生成,用完即释放。3.可在单线程下实现并发运算的处理效果。
yield与return的区别:相同点,都返回函数的执行结果。不同点,return在返回函数结果后,结束函数运行。而yield则是让函数变成一个生成器,生成器每次产生一个值(yield语句)函数被冻结,被唤醒后在产生一个值。
2)python中常用的正则表达式
[Pp]thon Pyhon python
rub[ye] ruby rube
[0-9] 任何数字
[a-z] 任何小写字母
[A-Z] 任何大写字母
[a-zA-Z0-9] 任何字母及数字
[^aeiou] 除aeiou外的所有字符
\d 数字字符 \D 非数字字符 \s 匹配任何空白字符
\S 匹配任何非空白字符
\w 匹配包括下划线的任何单词字符
\W 匹配任何非空白字符