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

 

posted @ 2017-08-02 15:05  wingsmm  阅读(99)  评论(0)    收藏  举报