为什么在Python协同程序中未检测到第二个参数?

为什么在Python协同程序中未检测到第二个参数?,python,coroutine,Python,Coroutine,我修改了以下代码: 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("Do

我修改了以下代码:

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")
输出:

寻找爱情和女人
我爱你
你不爱我吗?
我更喜欢合作


第二个参数
“woman”
在上次搜索中无法识别。为什么会这样?

你的情况应该是这样的:

if p1 in line or p2 in line:
因为
(p1或p2)
会返回
p1
,只要里面有东西。

因此,如果p1在第行:

中,您当前的状况总是计算为
,您的状况应该是这样的:

if p1 in line or p2 in line:
因为
(p1或p2)
会返回
p1
,只要里面有东西。

因此,如果第1行中的p1为:

,则当前条件的计算结果始终为
,因为您的代码条件是两个参数(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")

因为您的代码条件是两个参数(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")

如果您在python解释器中键入
a=“love”和b=”woman”
,如果我们执行
a或b
,则返回
love
同样相关:如果您在python解释器中键入
a=“love”和b=”woman”
,如果我们执行
a或b
,则返回
love
同样相关: