这两个结构相同的代码如何产生两个不同的结果?

时间:2019-01-09 16:29:10

标签: python generator typeerror

我有两个结构相同但任务不同的代码。其中一个生成正确答案,而另一个生成TypeError

  

TypeError:int()参数必须是字符串或数字,而不是'generator'

# The correct one
def square_digits(num):
    return int(''.join(str(int(i)**2) for i in str(num)))

# The one generates Type error
def mirror(num):
    return int(''.join(str(num)[i]) for i in range(len(str(num))-1,-1,-1))

1 个答案:

答案 0 :(得分:0)

我认为编写函数的方式可能令人困惑且不清楚。这也可能使您无法意识到错误的出处,因此我拿起您的代码并转身

overflow:auto;

转换成等效的代码,但是我用常规的def square_digits(num): return int(''.join(str(int(i)**2) for i in str(num))) # The one generates Type error def mirror(num): return int(''.join(str(num)[i]) for i in range(len(str(num))-1,-1,-1)) 循环替换了generator对象:

for

由于代码本身是等效的,因此def square_digits(num): result = [] for i in str(num): result += [str(int(i)**2)] result = ''.join(result) result = int(result) return result # The one generates Type error def mirror(num): result = [] for i in range(len(str(num))-1,-1,-1): result += [''.join(str(num)[i])] result = int(result) return result 仍然会产生相同的错误:

mirror

致电时

Traceback (most recent call last):
  File "test.py", line 27, in <module>
    print(mirror(12))
  File "test.py", line 22, in mirror
    result = int(result)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

result = int(result) 函数中,mirror仍然是一个列表。这就是错误的来源。

当您查看这段未公开的代码时,这仍然是您要编写的内容还是在算法中发现了错误?