微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多个步骤/操作和多行中重新设置变量是否有最佳实践/干净的代码方式来做到这一点?

如何解决在多个步骤/操作和多行中重新设置变量是否有最佳实践/干净的代码方式来做到这一点?

这是我一直想知道的事情。请考虑以下 Python 代码

soup = BeautifulSoup(website.content,'html.parser')
data = soup.find_all("div",class_ = "innerInfo")

auction_price = element.select(".EUR")[0].text
auction_price = auction_price.split("€")[1]
auction_price = auction_price.replace(",","")
auction_price = float(auction_price)

我正在尝试将 ebay 上特定商品的价格添加数据库中以创建时间序列。 为了获得auction_price,我必须多次提取和重新格式化价格。选择正确的元素,去除 € 符号,去除逗号,最后将其转换为浮点数。

最后,我必须连续四次声明相同的变量“auction_price”。据我所知,这不被视为“干净的代码”。我考虑了以下替代方案:

  1. 在一行中完成所有重新格式化。但是,这在可读性方面会差很多,也不符合干净的代码标准。
  2. 找到一种“更智能”的方法提取数据,从而减少重新格式化的需要。然而,它不能保证总是有这样的方式。因此,即使此特定示例的操作要简单得多,我仍然会对最佳实践解决方案感兴趣,
  3. 对每个步骤使用不同的变量名称。然而,创建大量没有真正在任何地方使用的临时变量似乎有点低效,而且可能也无法真正满足干净的代码标准?

我认为在多个操作中重新格式化数据经常发生,并且在大多数语言中都应该有最佳实践。但是,我在 Clean Code 或 PEP8 中找不到任何可以真正回答这个特定问题的内容。我也试过谷歌,但很难在一个搜索查询中表达这个问题,所以大多数点击与我正在寻找的内容几乎没有关系。

有谁知道这方面的最佳做法是什么?

解决方法

auction_price = element.select(".EUR")[0].text
auction_price = auction_price.split("€")[1]
auction_price = auction_price.replace(",","")
auction_price = float(auction_price)

我不知道这是否符合 PEP8,但可以简单地重写为:

auction_price = float(element.select(".EUR")[0].text.split("€")[1].replace(",""))

或者,使用方法链(也称为构建器模式):

auction_price = (
    element.select(".EUR")[0].text
    .split("€")[1]
    .replace(","")
    __float__(auction_price)
)

注意:str.replace 仅替换 pattern 中第一次出现的 str。要替换所有出现的内容,请使用 re.sub(pattern,replacement,str)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。