我有这个功能
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
答案 0 :(得分:0)
问题在于numList = map(toInt, strNum)
使numList
成为iterator。对其进行一次迭代之后,它就会耗尽,并且将不再包含任何值。 print(list(numList))
行通过遍历它,创建一个列表,打印该列表的字符串表示形式然后丢弃所有内容来实现此目的。如果打印行带有注释,则map
返回的迭代器将生成值;在print
就位的情况下,numList
实际上是空的。
为防止这种情况,请使用numList = list(map(toInt, strNum))
;这样,您将拥有一个可以重复使用的持久列表对象。