这个在Python中是如何工作的:print(sum(int(x) for x in raw_input().split()))
我刚接触Python,看到下面这行代码让我很惊讶。
print (sum(int(x) for x in raw_input().split()))
我用Java的思维方式无法理解里面发生了什么,特别是for循环中x是怎么传给int()的。
6 个回答
2
我们来分解一下这个内容。
print (sum(int(x) for x in raw_input().split()))
这也可以表示为
sequence = raw_input().split()
conv = []
for i in sequence:
conv.append(int(i))
print sum(conv)
现在我们可以用一行代码把它们合并起来,使用
[int(x) for x in raw_input().split()]
但这样做不是懒惰的写法,所以为了让它变得懒惰,我们只需要把 [
替换成 (
(int(x) for x in raw_input().split())
现在因为这是一个可迭代的对象,我们可以把它传给 sum()
函数
这就是发生的事情。
3
首先,raw_input().split()
这个命令会读取一行输入,然后把这行输入按照空格分开,变成一个个小部分。比如说,如果输入是 1 3 2 5 7 3
,那么它就会变成一个列表 ['1', '3', '2', '5', '7', '3']
。
这个列表接着会用在一个叫做 生成器表达式 中,写作 int(x) for x in list_above
。这个表达式的作用是把列表里的每个元素都转换成整数形式。
这个生成器会在调用 sum()
的时候被计算出来,sum()
会把所有的数字加起来。
9
raw_input().split()
会把每一行输入分成一个数组。(int(x) for x in a)
是一个生成器表达式,它会把每一行的输入都变成整数。这样,生成器表达式的结果就是一个整数数组,每个元素对应一行输入。
最后,sum
会把这个数组里的所有元素加起来,当然 print
会把结果输出出来。所以,这段代码的作用就是计算所有输入行的总和,而每一行都是一个数字。