我在Python中有一个非常简单的代码,无法弄清楚循环为什么不会停止。我特别想在函数内部使用辅助函数。有什么想法吗?
def x():
a = range(0,5)
def y(ran):
while ran != []:
ran = ran[:-1]
print(ran)
return y(ran)
return y(a)
x()
答案 0 :(得分:0)
Python不会从您的范围内生成列表(节省时间和内存),而只是使用range object来定义数字范围。
执行ran = ran[:-1]
时,它将返回一个新范围。第一次运行时,先从ran = range(0, 5)
开始,然后从ran[:-1] == range(0, 4)
开始,然后从range(0, 3)
开始,依此类推。它永远不会终止,因为它最终会在range(0, 0)
处触底,但这不等于[]
。
您可以通过将测试更改为while ran != range(0, 0):
(在Python 3.3+中)或更简单的while ran:
来解决此问题,因为range(0, 0)
的评估结果为False
。
答案 1 :(得分:0)
使用while ran:
作为您指定的条件将始终为true,因为ran
是一个范围而不是一个列表。