1.定义一个生成器函数,生成1-10
def func():
for i in range(1, 11):
yield i
使用next(generator)方法获取1-10
gen2 = func()
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
使用for循环获取
gen2 = func()
for i in gen2:
print(i, end=" ")
结果可得到 1 2 3 4 5 6 7 8 9 10
2.模拟range的功能,自己建立一个range:MyRange
range(10)
range(1, 10)
range(1, 10, 1) =>
start, stop, step
range(10, 1, -1)
range(10, -1, -1)
range(-10, -1, 1)
range(-1, -10, -1)
class MyRange:
def __init__(self, *args):
if len(args) == 0:
raise TypeError("MyRange expected at least 1 argument")
elif len(args) == 1:
self.start = 0
self.stop = args[0]
self.step = 1
elif len(args) == 2:
self.start, self.stop = args
self.step = 1
elif len(args) == 3:
self.start, self.stop, self.step = args
if self.step == 0:
raise ValueError("MyRange() arg 3 must not be zero")
else:
raise TypeError("MyRange expected at most 3 arguments")
def __iter__(self):
return self
def __next__(self):
data = self.start
if self.step > 0:
if self.start < self.stop:
self.start += self.step
return data
else:
raise StopIteration
if self.step < 0:
if self.start > self.stop:
self.start += self.step
return data
else:
raise StopIteration
print(list(MyRange(10)))
print(list(MyRange(1, 10)))
print(list(MyRange(1, 10, 1)))
print(list(MyRange(-10, -1, 1)))
print(list(MyRange(10, 1, -1)))
print(list(MyRange(10, -1, -1)))
print(list(MyRange(-1, -10, -1)))
结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[-10, -9, -8, -7, -6, -5, -4, -3, -2]
[10, 9, 8, 7, 6, 5, 4, 3, 2]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[-1, -2, -3, -4, -5, -6, -7, -8, -9]
3. re中函数的使用(自己写用例来使用):
match
import re
pattern = "abc"
string = "abcabcabc"
# 只匹配字符串的开始位置,0或者多个字符匹配到了正则表达式样式,则返回None或者相应的匹配对象
print(re.match(pattern, string))
<re.Match object; span=(0, 3), match='abc'>
fullmatch
pattern = "abcabcabc"
string = "abcabcabc"
# 匹配整个字符串,0或者全部字符匹配到了正则表达式样式,则返回None或者相应的匹配对象
print(re.fullmatch(pattern, string))
<re.Match object; span=(0, 9), match='abcabcabc'>
search
pattern = "bca"
string = "abcabcabc"
# 扫描整个字符串 找到匹配样式的第一个位置,返回相应的 匹配对象。没有匹配则返回 None
print(re.search(pattern, string))
<re.Match object; span=(1, 4), match='bca'>
findall
pattern = "abc"
string = "abcabcabc"
# 返回 pattern 在 string 中的所有非重叠匹配,以字符串列表或字符串元组列表的形式。
# 对 string 的扫描从左至右,匹配结果按照找到的顺序返回。空匹配也包括在结果中。
print(re.findall(pattern, string))
['abc', 'abc', 'abc']
finditer
pattern = "abc"
string = "abcabcabc"
# pattern 在 string 里所有的非重复匹配,返回为一个迭代器 iterator 保存了 匹配对象。
# string 从左到右扫描,匹配按顺序排列。空匹配也包含在结果里。
iterator = re.finditer(pattern, string)
num = iter(iterator)
print(next(num))
print(next(num))
print(next(num))
<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(3, 6), match='abc'>
<re.Match object; span=(6, 9), match='abc'>
split
pattern = ","
string = "中国,陕西,西安"
# 用 pattern 分开 string 。
# 如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里。
print(re.split(pattern, string))
['中国', '陕西', '西安']
sub
print(re.split(pattern, string))
pattern = ","
string = "中国,陕西,西安"
repl = "-"
# 返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。
# 如果样式没有找到,则不加改变地返回 string。
# repl 可以是字符串或函数;如为字符串,则其中任何反斜杠转义序列都会被处理。
print(re.sub(pattern, repl, string))
中国-陕西-西安
subn
pattern = ","
string = "中国,陕西,西安"
repl = "|"
# 行为与 sub() 相同,但是返回一个元组 (字符串, 替换次数).
print(re.subn(pattern, repl, string))
('中国|陕西|西安', 2)
complie
pattern = "abc"
string = "abcabcabc"
prog = re.compile(pattern)
result = prog.match(string)
# 将正则表达式的样式编译为一个 正则表达式对象 (正则对象),
# 可以用于匹配,通过这个对象的方法 match(), search() 以及描述。
print(result)
这等价于
result = re.match(pattern,string)
print(result)
结果相同
<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(0, 3), match='abc'>