While用ran = ran [:-1]在范围(0,5)上循环;跑!= []始终为真

时间:2019-09-16 19:48:41

标签: python python-3.x

我在Python中有一个非常简单的代码,无法弄清楚循环为什么不会停止。我特别想在函数内部使用辅助函数。有什么想法吗?

def x():
    a = range(0,5)

    def y(ran):
        while ran != []:
            ran = ran[:-1]
            print(ran)
            return y(ran)

    return y(a)

x()

2 个答案:

答案 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是一个范围而不是一个列表。