Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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 发电机出现错误。。。在一个不';不要用它们_Python_Generator - Fatal编程技术网

Python 发电机出现错误。。。在一个不';不要用它们

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

我不是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(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))]