此处主要记录关于Python字符串的一些便利操作。
在 Python 中,一边循环一边计算的机制,称为生成器(Generator);
生成器是一个返回迭代器的函数,只能用于迭代操作
;
(yield就是专门给生成器用的return)
def gen():
print('1')
yield '111111'
print('2')
yield '222222'
print('3')
yield '333333'
g = gen()
print(g) #
next(g) # 1
next(g) # 2
next(g) # 3
next(g, 'over')
使 用 类 的 _ _ i t e r _ _ 方 法 实 现 生 成 器 函 数 , 每 次 y i e l d 返 回 一 个 素 数 。 \color{red}{使用类的\_\_iter\_\_方法实现生成器函数,每次yield返回一个素数。} 使用类的__iter__方法实现生成器函数,每次yield返回一个素数。
class PrimeNumbers:
def __init__(self,start,end):
self.start = start
self.end = end
def isPrimeNum(self,k):
if k < 2:
return False
for i in range(2,k):
if k % i == 0:
return False
return True
def __iter__(self):
for k in range(self.start,self.end+1):
if self.isPrimeNum(k):
yield k
for x in PrimeNumbers(1,100):
print(x)
主要用于一边处理数据一边显示该条结果。
reversed(l)
# 列表的方向迭代器
class FloatRange:
def __init__(self,start,end,step=0.1):
self.start = start
self.end = end
self.step =step
def __iter__(self):
t = self.start
while t <= self.end:
yield t
t += self.step
def __reversed__(self):
t =self.end
while t >= self.start:
yield t
t -= self.step
# 正向迭代
for x in FloatRange(1.0,4.0,0.5):
print(x)
# 反向迭代
for x in reversed(FloatRange(1.0,4.0,0.5)):
print(x)
使 用 类 的 _ _ r e v e r s e d _ _ 方 法 实 现 生 成 器 函 数 , 每 次 y i e l d 返 回 一 个 素 数 。 \color{red}{使用类的\_\_reversed\_\_方法实现生成器函数,每次yield返回一个素数。} 使用类的__reversed__方法实现生成器函数,每次yield返回一个素数。
不支持负数操作,到末尾第三个参数为None
from itertools import islice
l = range(20)
t = iter(l)
for x in islice(t,5,10):
print(x)
使 用 标 准 库 中 的 i t e r t o o l s . i s l i c e , 它 能 返 回 一 个 迭 代 对 象 切 片 的 生 成 器 。 \color{red}{使用标准库中的itertools.islice,它能返回一个迭代对象切片的生成器。} 使用标准库中的itertools.islice,它能返回一个迭代对象切片的生成器。
from random import randint
chinese = [randint(60,100) for x in range(40)]
math = [randint(60,100) for x in range(40)]
english = [randint(60,100) for x in range(40)]
total = []
for c,m,e in zip(chinese,math,english):
total.append(c+m+e)
print(total)
使 用 内 置 函 数 z i p , 它 将 多 个 可 迭 代 对 象 合 并 , 每 次 迭 代 返 回 一 个 元 组 。 \color{red}{使用内置函数zip,它将多个可迭代对象合并,每次迭代返回一个元组。} 使用内置函数zip,它将多个可迭代对象合并,每次迭代返回一个元组。
from itertools import chain
a = (1,2,3)
b = ['a','c','d']
for i in chain(a,b):
print(i)
使 用 标 准 库 中 的 i t e r t o o l s . c h a i n , 它 将 多 个 可 迭 代 对 象 链 接 。 \color{red}{使用标准库中的itertools.chain,它将多个可迭代对象链接。} 使用标准库中的itertools.chain,它将多个可迭代对象链接。