【问题标题】:Python if statement and assignmentPython if 语句和赋值
【发布时间】:2020-08-07 18:42:57
【问题描述】:

我正在使用 Python 中的 BeautifulSoup 来解析一些 XML。我发现自己不得不编写看起来像这样的代码

for document in soup.find_all('document'):
    if document.find('doc-number'):
        doc_number = document.find('doc-number').string
    # More similar if statements further down

我发现编写document.find('doc-number') 两次:一次在if 语句中,一次在if 块中相当麻烦并且导致代码行很长。

有什么方法可以让代码更短、更 Pythonic 吗?

这是 Python 3.6

【问题讨论】:

  • 哪个版本的 Python?您可以在 3.8 中使用 assignment expression。
  • 哦,好的,是的。已删除!
  • @jonrsharpe,我在问题中添加了 Python 的版本
  • 然后您可以为可能元素 (el = document.find('doc-number')) 或函数提取变量(您可以像 doc_number = get_string_from('doc-number') 一样调用)。

标签: python-3.x if-statement beautifulsoup


【解决方案1】:

从python 3.8开始,

for document in soup.find_all('document'):
    if (doc := document.find('doc-number')) is not None:
        doc_number = doc.string

这些被称为赋值表达式。 https://www.python.org/dev/peps/pep-0572/

编辑:您刚刚将 python 版本更新为 3.6,对于低于 3.8 的版本,@jonrsharpe 评论是更好的答案

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2021-08-13
    • 2020-01-20
    • 2020-06-27
    相关资源
    最近更新 更多