尝试更多地理解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。“
是的,但是这个生成器的编写方式有一半的值来自这个
yield
:只会产生
None
。对next
的调用使用None
。在为了消除大多数
^{pr2}$next
调用,可以编写不同的生成器:但是,生成器与其用户之间的
yield
/send
通信不能以send
开始,因为新的生成器在函数体的开头而不是在可以接收值的yield
处停止。因此,在启动生成器将使用的next
(或相当于send(None)
)之前,必须始终存在一个next
(或相当于send(None)
)的值。在相关问题 更多 >
编程相关推荐