Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用send将值传递给yield_Python_Python 2.7_Yield - Fatal编程技术网

Python 使用send将值传递给yield

Python 使用send将值传递给yield,python,python-2.7,yield,Python,Python 2.7,Yield,当我在谷歌上搜索pythonyield时,我发现了一些有趣的事情,我以前从未知道过,也就是说,我们可以将值传递给yield来更改下一个()值。我希望一些新的pythonist可能现在意识到这一点,我也不知道它是如何工作的。因此,如果有人能解释它是如何工作的,以及当我使用send()发送一个新的索引时行为是如何变化的 以下是我的片段: def print_me (count): i = 0 while i < count: val = (yield i)

当我在谷歌上搜索python
yield
时,我发现了一些有趣的事情,我以前从未知道过,也就是说,我们可以将值传递给yield来更改下一个()值。我希望一些新的pythonist可能现在意识到这一点,我也不知道它是如何工作的。因此,如果有人能解释它是如何工作的,以及当我使用
send()
发送一个新的索引时行为是如何变化的

以下是我的片段:

def print_me (count):
    i = 0
    while i < count:
        val = (yield i)
        if val is not None:
            i = val
        else:
            i += 1

gen = print_me(10)

for i in gen:
   if i == 5:
       gen.send(8)
   else:
       print i

你的测试代码实际上很有启发性。在这样的生成器函数中,无论何时调用生成器上的
next
,代码都会被执行,直到到达
yield
语句。生成值,然后在生成器中执行“暂停”。如果将一些数据发送到生成器,则该值将从
yield
返回。如果您不
.send
任何内容,
yield
返回
None


因此,在代码中,当您
.send(8)
时,它会在生成器中设置
val=8
val=yield i
)。由于
val不是None
i
被设置为
8
.send
实际执行,直到下一个yield语句(返回该值--
8
)为止。然后一切恢复正常(下一个数字是
9
)。

你的问题是什么?你不了解哪一部分的行为?当我发送一个新的索引时,屈服点是如何指向新的索引的。基本上我很困惑
yield
是在使用某种链表还是?我不太明白你所说的“新索引的屈服点”是什么意思。使用
send
时,所发送的值将成为
yield
表达式的值。如何在生成器中使用它取决于您。这个“增强”的生成器语法是在Python2.5中添加的,用于构建协同路由。这里有一些有趣的相关信息:需要注意的一件重要事情是
send
推进生成器(即,运行它直到下一个
yield
并给出下一个值)。这有时会让人困惑。@BrenBarn--谢谢,这是真的(我总是需要查一下)。我已经澄清了答案。谢谢你@BrenBarn和mgilson。我想现在我明白了。这种先进的
产量
有什么使用案例吗?我什么也看不到。@yopy——协同程序。我自己也没有用过,所以我不能给你一个好的用例。看看roippi发布的PEP中的合作计划和信息。
0
1
2
3
4
9