我知道Python中的生成器维护本地状态。这意味着什么?

我知道Python中的生成器维护本地状态。这意味着什么?,python,scope,generator,local-variables,Python,Scope,Generator,Local Variables,我知道Python中的生成器维护本地状态。我已经阅读了PEP255中涉及斐波那契序列的示例 然而,我仍然不明白这意味着什么。即 1) 这为什么有用 2) 如果发电机不保持本地状态,会发生什么?你能给我看一个简单的代码示例吗 3) 保持局部状态是否与生成器通过在迭代过程中一次只生成一个值而不是将整个iterable对象存储在内存中来节省内存的能力有关 4) 维持地方政府有什么不利之处吗 你如何想象一个发电机在不保持状态的情况下工作…?或者,你认为“保持状态”是什么意思?你的问题太宽泛了,1和2在

我知道Python中的生成器维护本地状态。我已经阅读了PEP255中涉及斐波那契序列的示例

然而,我仍然不明白这意味着什么。即

1) 这为什么有用

2) 如果发电机不保持本地状态,会发生什么?你能给我看一个简单的代码示例吗

3) 保持局部状态是否与生成器通过在迭代过程中一次只生成一个值而不是将整个iterable对象存储在内存中来节省内存的能力有关


4) 维持地方政府有什么不利之处吗

你如何想象一个发电机在不保持状态的情况下工作…?或者,你认为“保持状态”是什么意思?你的问题太宽泛了,1和2在你链接到的PEP255中的斐波那契例子中得到了清楚的解释。3的答案是肯定的。此外,您不能总是生成整个iterable,因为它可以是无限的(例如Fibonacci级数)。你应该澄清4:与什么相比的缺点?如果不保持某种状态,就不能实现生成器。@deceze:这是我对“维护局部状态”的理解:在生成器函数内进行的任何变量赋值都不会影响生成器函数外的变量赋值。我错了吗?如果是这样,请纠正我。@Selcuk:请原谅我的无能,但我已经读过斐波那契例子好几遍了,我还是不明白。这似乎是关键的陈述:“fib在所有局部状态完好无损的情况下在屈服后继续。a和b然后变成1和1,fib循环回到屈服,将1返回到其调用程序。”我不理解“所有局部状态完好无损”这个短语。这意味着什么?它与这个生成器的效用有什么关系?@Iterator516您似乎对“维护本地状态”这个术语感到困惑。这意味着所有内部状态(如局部变量,包括循环索引)都将保留,直到后续调用该函数为止。这样,函数“记住”上一个状态,并从停止的位置继续运行。这就是它返回“下一个”Fibo编号的方式。如果不是针对生成器函数(即
yield
关键字),每次调用时都会返回1。您如何想象一个生成器在不保持状态的情况下工作…?或者,你认为“保持状态”是什么意思?你的问题太宽泛了,1和2在你链接到的PEP255中的斐波那契例子中得到了清楚的解释。3的答案是肯定的。此外,您不能总是生成整个iterable,因为它可以是无限的(例如Fibonacci级数)。你应该澄清4:与什么相比的缺点?如果不保持某种状态,就不能实现生成器。@deceze:这是我对“维护局部状态”的理解:在生成器函数内进行的任何变量赋值都不会影响生成器函数外的变量赋值。我错了吗?如果是这样,请纠正我。@Selcuk:请原谅我的无能,但我已经读过斐波那契例子好几遍了,我还是不明白。这似乎是关键的陈述:“fib在所有局部状态完好无损的情况下在屈服后继续。a和b然后变成1和1,fib循环回到屈服,将1返回到其调用程序。”我不理解“所有局部状态完好无损”这个短语。这意味着什么?它与这个生成器的效用有什么关系?@Iterator516您似乎对“维护本地状态”这个术语感到困惑。这意味着所有内部状态(如局部变量,包括循环索引)都将保留,直到后续调用该函数为止。这样,函数“记住”上一个状态,并从停止的位置继续运行。这就是它返回“下一个”Fibo编号的方式。如果不是针对生成器函数(即
yield
关键字),则每次调用时都会返回1。