中间打印结果不同

时间:2018-11-15 18:05:52

标签: python python-3.x

我有这个功能

def getDigits (num) :
    check = checkNum(num)
    #print('num: '+str(num))
    if check is False :
        strNum  = str(num)
        numList = map(toInt, strNum)
        #print(list(numList))
        squareList = map(getSquareOfDigits, numList)
        #print(list(squareList))
        sumOfSquares = sum(squareList)
        print('sumSqr: '+str(sumOfSquares))
        getDigits(sumOfSquares)
    else :
        return check

其结果是:

sumSqr:4

sumSqr:16

sumSqr:37

sumSqr:58

sumSqr:89

sumSqr:9

sumSqr:81

sumSqr:65

sumSqr:61

sumSqr:37

sumSqr:58

sumSqr:89

但是如果我取消所有打印的注释,结果将是:

[2]
[]
sumSqr: 0
[3]
[]
sumSqr: 0

好的,我知道list方法会改变结果,但是我想知道有一种方法可以打印对象变量而不改变结果,并且不使用中间变量。

更新

完整示例here

1 个答案:

答案 0 :(得分:0)

问题在于numList = map(toInt, strNum)使numList成为iterator。对其进行一次迭代之后,它就会耗尽,并且将不再包含任何值。 print(list(numList))行通过遍历它,创建一个列表,打印该列表的字符串表示形式然后丢弃所有内容来实现此目的。如果打印行带有注释,则map返回的迭代器将生成值;在print就位的情况下,numList实际上是空的。

为防止这种情况,请使用numList = list(map(toInt, strNum));这样,您将拥有一个可以重复使用的持久列表对象。

相关问题