我在解决问题时遇到了这段代码。我只是无法理解print
之前的最后一行代码是如何工作的。请解释一下。
import re
import urllib.request
from bs4 import BeautifulSoup
# url = 'http://py4e-data.dr-chuck.net/comments_42.html'
url = 'http://py4e-data.dr-chuck.net/comments_228869.html'
soup = BeautifulSoup(urllib.request.urlopen(url).read(), 'html.parser')
s = sum(int(td.text) for td in soup.select('td:last-child')[1:])
print(s)
这是操作顺序:
soup.select('td:last-child')
是一种返回所选元素list
的方法[1:]
是一个切片操作 - 它创建一个新列表,跳过列表中的第一个(零个)项for td in
是一个循环,其中列表的项目依次分配给td
int(td.text)
在td
中获取对象的"text"属性,然后创建其整数等效
项sum()
生成这些整数时对其进行求和
您可以分解以下作业...
s = sum(int(td.text) for td in soup.select('td:last-child')[1:])
。分为几个语句:
all_td = soup.select('td:last-child') # get all last TD elements in each TR
rest_td = all_td[1:] # skip the first TD among those
s = 0 # for accumulating a sum
for td in rest_td:
val = int(td.text) # parse the text in the TD as an integer
s += val # add that number to the running sum
现在,您可以使用调试器逐步执行这些语句,或者在此处和那里添加一些打印调用,以查看发生了什么。