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"}))
添加回答
舉報