2017-10-18 66 views
-1

您好我有四个方向列表和方法类似Pycharm debuger disconects

directions = ["NORTH", "EAST", "SOUTH", "WEST"] 
def rotate_left(self): 
    cycled = cycle(self.directions) 
    current = dropwhile(lambda x: x != self.direction, cycled) 
    self.direction = next(current) 

但不知何故,这个方法我的程序停止后没有任何异常

任何想法,为什么? 感谢

+0

写再现您的问题 –

+0

我只是调用这个方法的,好像在最后的陈述 – PapeK24

+0

过程周期你是如何调用'rotate_left'一个完整的例子吗? – Wondercricket

回答

0

看来,问题是dropwhile()条件的情况下,在我的代码中永远无法实现。由于蟒蛇懒惰执行似乎问题与我调用next(),但它只是因为那是当dropwhile()执行时,导致它循环通过无尽的列表没有完成条件。

对不起,浪费你的时间每一个人。

2

我能重复你的问题的说明下面的代码

from itertools import cycle, dropwhile 

direction = None 
directions = ["NORTH", "EAST", "SOUTH", "WEST"] 
cycled = cycle(directions) 
current = dropwhile(lambda x: x != direction, cycled) 
direction = next(current) 

这是很难没有你的代码的其余部分的说法,而是由外观上来看,的direction初始值不不存在于directions列表中;意思是它既不NORTHSOUTHEAST,或WEST(区分大小写)。这导致一个无限迭代cycledropwhile

如果你读了itertools文档之间,dropwhile

作出这样的下降从迭代只要谓词是真实的元素的迭代器;之后,返回的每一个元素

首先,鉴于dropwhile下降的元素,只要谓词是真实的,它最终会停止,一旦它到达一个假值,然后返回剩余的元素。其次,使用cycle生成重复迭代器

使迭代器从迭代器中返回元素并保存每个元素的副本。当迭代器耗尽时,从保存的副本中返回元素。不断地重复

由于direction值不中directions存在,dropwhile正在通过无限长的迭代器,从不达到打破它