Python生成器协同程序

2024-09-24 20:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试更多地理解python中的generator/send函数。我读了一些链接:generator send function purpose这对我很有帮助。在

但我正在努力理解下面的代码。为什么next(checker)是必需的?send函数是否自动请求生成器中的下一个项?我试着在for循环之前使用next(checker),但它的作用方式不同。我以为send函数以x的形式发送'trunt'并生成是否x == password。我只是不明白为什么有必要让下一个(检查器)在循环中。在

def checkPassword(attempts, password):
    def check():
        while True:
            x = yield
            yield x == password

    checker = check()
    for i, attempt in enumerate(attempts):
        next(checker)
        if checker.send(attempt):
            return i + 1

    return -1

上述功能基于以下问题:

“为了验证您的功能,您需要在本地测试它。给定尝试的列表和正确的密码,返回第一次正确尝试的基于1的索引,如果没有,则返回-1。在

示例

对于attempts = ["hello", "world", "I", "like", "coding"]password = "like",输出应该是 checkPassword(尝试,密码)=4。“


Tags: 函数功能sendforreturndefcheckchecker
1条回答
网友
1楼 · 发布于 2024-09-24 20:33:16

Doesnt the send function automatically ask for the next item in the generator?

是的,但是这个生成器的编写方式有一半的值来自这个yield

x = yield

只会产生None。对next的调用使用None。在


为了消除大多数next调用,可以编写不同的生成器:

^{pr2}$

但是,生成器与其用户之间的yield/send通信不能以send开始,因为新的生成器在函数体的开头而不是在可以接收值的yield处停止。因此,在启动生成器将使用的next(或相当于send(None))之前,必须始终存在一个next(或相当于send(None))的值。在

相关问题 更多 >