PY进阶——生成器与正则

迭代器

迭代器是py的一种对象,可以对数据集进行遍历,例如列表、元组、range()等等
实现了__iter__()和__next__()方法的对象,可以逐步遍历它的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Foreach:
def __init__(self,start,end):
self.start = start
self.end = end
def __iter__(self):#返回迭代对象
return self
def __next__(self):#返回当前值并更新当前值
if self.start >= self.end:
raise StopIteration
else:
self.start+=1
return self.start-1
for i in Foreach(1,6):
print(i)

生成器

根据程序员制定的规则循环生成数据,当条件不成立时生成数据结束,使用一个再生成一个,可以节约内存
创建方式
生成器推导式

1
2
3
4
5
6
7
8
# 创建生成器
g=(i for i in range(1,11) if i%2==0)
print(g)
# <generator object <genexpr> at 0x000001DFD0750380>
# 获取数据
print(next(g))#2
for target in g:
print(target)#4 6 8 10

上述代码中循环输出语句没有输出2是因为生成器是使用一个再生成一个,2在next中已经被使用了
yield关键字创建

1
2
3
4
5
6
7
8
9
#定义函数,存储到生成器中并返回
def g():
for i in range(2,11,2):
yield i
g=g()
print(g)
print(next(g))
for target in g:
print(target)

结果与推导式的一致

Property属性(原型)

把函数当属性使用,可以简化代码使用
装饰器定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# @property 修饰 获取值的函数
# 获取值的函数名.setter 修饰设置值的函数
# .函数名 当属性名来使用
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
@property
def get_age(self):
return self.__age
# 装饰名与函数要一致
@get_age.setter
def get_age(self, age):
self.__age = age
if __name__ == "__main__":
p=Person('john', 18)
p.get_age=20
print(p.get_age)

类属性定义

1
2
3
4
5
6
7
8
9
10
11
12
13
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
self.__age = age
age = property(get_age, set_age)
if __name__ == "__main__":
p=Person('john', 18)
p.age=10
print(p.age)

正则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
"""
match默认从前往后匹配,匹配则返回
search是分段找,存在段匹配则返回
compile('正则表达式').sub(替换后的内容,要被替换的字符串)
常用规则
. 代表任意一个字符(\n除外)
\. 取消.的特殊含义,就是一个普通的.
[abc] 代表abc中任意一个字符
[^abc] 代表出了abc外任意的一个字符
\d 代表数字,等价于[0-9]
\D 代表非数字 等价于[^0-9]
* 数量词任意多个字符
+ 匹配前一个字符多次
? 匹配前一个字符0或1次
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次
\s 匹配空白,即空格,tab键
\S 匹配非空白
\w 匹配非特殊字符,如a-z,A-Z,0-9、_、汉字
\W 匹配特殊字符
^ 匹配字符串开头
$ 匹配字符串结尾
| 匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
\num 引用分组num匹配到字符串
(?P<分组名>)设置分组
(?P=分组名)
"""
# \num的使用
res=re.match('<([a-zA-Z]{1,4})>.*</\1>',html)#匹配标签
1
2
3
4
5
6
# 导入
import re
# 校验
res=re.match('校验规则','被校验字符串')
# 获取数据
info=res.group()

PY进阶——生成器与正则
http://example.com/2026/04/01/PY进阶——生成器与正则/
作者
印星
发布于
2026年4月1日
许可协议