2 回答
TA贡献1866条经验 获得超5个赞
首先,您可以将循环中的所有步骤重写为一个单独的函数:
def get_price(post):
price = post.find_all("span", {"class" : "s-item__price"})[0].text
price2 = price.strip( '$' )
price3 = price2.replace(",", "")
price4 =price3[0:5]
price5 = float(price4)
price6 = round(price5)
return price6
现在您拥有的循环可以重写为
for post in soup.find_all("li",{"class" : "s-item"}):
print(get_price(post))
你问的重点是什么?好吧,Python 的内置sum函数有一个接口,可以让你传入这样的生成器:
sum(get_price(post) for post in soup.find_all("li",{"class" : "s-item"}))
或等效地:
sum(map(get_price, soup.find_all("li",{"class" : "s-item"})))
您可以将函数重写为单行函数:
def get_price(post):
return round(float(post.find_all("span", {"class" : "s-item__price"})[0].text.strip('$').replace(',', '')[:5]))
这不会使您的代码更清晰,但您可以使用等效表达式避免在此处编写单独的函数:
sum(round(float(post.find_all("span", {"class" : "s-item__price"})[0].text.strip('$').replace(',', '')[:5])) for post in soup.find_all("li",{"class" : "s-item"}))
添加回答
举报