为什么Python Coroutines中没有检测到第二个参数?

时间:2018-02-17 08:39:00

标签: python coroutine

我修改了Coroutines中的一些代码,如下所示:

def grep(p1, p2):
    print("Searching for", p1 ,"and", p2)
    while True:
        line = (yield)
        if (p1 or p2) in line:
            print(line)

search = grep('love', 'woman')
next(search)
search.send("I love you")
search.send("Don't you love me?")
search.send("I love coroutines instead!")   
search.send("Beatiful woman")

输出:

  

寻找爱情和女人   我爱你   你不爱我吗?   我喜欢coroutines!

在上次搜索中无法识别第二个参数"woman"。那是为什么?

2 个答案:

答案 0 :(得分:3)

你的情况应该是这样的:

if p1 in line or p2 in line:

因为(p1 or p2)只要有内容就会返回p1 所以你当前的状况总是评估为if p1 in line:

答案 1 :(得分:0)

因为你的代码条件是两个参数(p1或p2)中的任何一个匹配它只返回p1,这就是为什么它不返回最后一个发送函数结果。 现在试试这段代码。

另外我附上代码输出的截图。

 def grep(p1, p2):
        print("Searching for", p1 ,"and", p2)
        while True:
            line = (yield)
            if (p1) in line:
                print(line)
            if (p2) in line:
                print(line)

    search = grep('love', 'woman')
    next(search)
    search.send("I love you")
    search.send("Don't you love me?")
    search.send("I love coroutines instead!")   
    search.send("beautiful woman")

enter image description here