python学习之day05
yield关键字和协程函数
每次调用yield会暂停,而可以使用next()函数和send()函数可以恢复生成器。
与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yield可以返回多次值
yield的表达式形式的应用:
def func(count):
print('start')
while True:
yield count
count+=1
g=func(10)
print(g)
print(next(g))
print(next(g))
def eater(name):
print('%s 说:我开动啦' %name)
while True:
food=yield
print('%s eat %s' %(name,food))
alex_g=eater('alex')
print(alex_g)
print(next(alex_g))
print(next(alex_g))
注意:1 第一阶段:初始化 2 第二阶段:给yield传值
应用于生产者消费者的问题:
def eater(name):
print('%s 说:我开动啦' %name)
food_list=[]
while True:
food=yield food_list
food_list.append(food) #['骨头','菜汤']
print('%s eat %s' %(name,food))
def producer():
alex_g=eater('alex')
next(alex_g)
while True:
food=input('>>: ').strip()
if not food:continue
print(alex_g.send(food))
producer()
初始化问题
def init(func):
def wrapper(*args,**kwargs):
g=func(*args,**kwargs)
next(g)
return g
return wrapper
@init
递归和二分法
递归的执行分为两个阶段:递推 回溯
def binary_search(l,number):
if len(l) > 1:
mid_index = len(l)//2
if number > mid_index:
l = l[mid_index:]
binary_search(l,number)
elif number < mid_index:
l = l[:mid_index]
binary_search(l,number)
else:
print("find it")
else:
if l[0] == number:
print('find it')
else:
print("not find it")
return

浙公网安备 33010602011771号