Python 发电机出现错误。。。在一个不';不要用它们
我不是pyton大师,所以这个问题可能会非常愚蠢 我正在尝试用python创建一个小rubiks立方体模拟器。我犯了以下奇怪的错误Python 发电机出现错误。。。在一个不';不要用它们,python,generator,Python,Generator,我不是pyton大师,所以这个问题可能会非常愚蠢 我正在尝试用python创建一个小rubiks立方体模拟器。我犯了以下奇怪的错误 File "./cube.py", line 168, in <module> c.R() File "./cube.py", line 105, in R self.sync_temp() File "./cube.py", line 118, in sync_temp self.oBack = deepcopy(sel
File "./cube.py", line 168, in <module>
c.R()
File "./cube.py", line 105, in R
self.sync_temp()
File "./cube.py", line 118, in sync_temp
self.oBack = deepcopy(self.Back)
File "/usr/lib/python3.2/copy.py", line 147, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.2/copy.py", line 209, in _deepcopy_list
y.append(deepcopy(a, memo))
File "/usr/lib/python3.2/copy.py", line 174, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.2/copy.py", line 285, in _reconstruct
y = callable(*args)
File "/usr/lib/python3.2/copyreg.py", line 88, in __newobj__
return cls.__new__(cls, *args)
TypeError: object.__new__(generator) is not safe, use generator.__new__()
在这方面:
temp_face = [(c_face[k][i] for k in reversed(range(0, self.size))) for i in range(0,self.size)]
…您正在创建一个生成器列表。因为:
(c_face[k][i] for k in reversed(range(0, self.size)))
…是一个生成器表达式
如果要将其作为列表,请使用列表理解而不是生成器表达式:
[c_face[k][i] for k in reversed(range(0, self.size))]
如果你想让它懒惰,那就意味着你想让它成为一个发电机,这意味着你不能复制它。相反,您必须编写一个复制其他所有内容的函数,并重新创建生成器(可能会将其推进到相同的状态),而不是复制它。遵循MVCE方法,将所有可能的内容都删除,直到只有导致错误所需的最少代码,这可能会解决您的问题。同样的问题:@Wiwiweb我已经读过了,这就是我如何理解我在生成器方面的问题的原因。我会尝试一下,即使我几乎看不到如何在列表中转换它comprehension@CarlierRobin:本教程解释得很好。如果您不理解理解,请将其重写为围绕
append
的显式循环。本教程还将在三个部分中解释生成器表达式,从开始,但不严格地说,您可以将生成器表达式视为不带方括号的理解,它根据需要缓慢地构建列表,而不是一次构建全部列表。
[c_face[k][i] for k in reversed(range(0, self.size))]