【问题标题】:What does a backslash by itself ('\') mean in Python? [duplicate]Python中的反斜杠本身('\')是什么意思? [复制]
【发布时间】:2016-06-30 13:57:31
【问题描述】:

我在 nltk 文档 (http://www.nltk.org/_modules/nltk/sentiment/vader.html) 中找到了这段代码

if (i < len(words_and_emoticons) - 1 and item.lower() == "kind" and \
            words_and_emoticons[i+1].lower() == "of") or \
            item.lower() in BOOSTER_DICT:
            sentiments.append(valence)
            continue

有人能解释一下 if 条件是什么意思吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    行尾的反斜杠告诉 Python 将当前 logical 行扩展到下一个 physical 行。请参阅 Python 参考文档的Line Structure section

    2.1.5。显式行加入

    两条或多条物理线可以通过以下方式连接成逻辑线 反斜杠字符 (\),如下所示:当物理行以 反斜杠不是字符串文字或注释的一部分,它是 与以下连接形成一个逻辑行,删除 反斜杠和以下行尾字符。例如:

    if 1900 < year < 2100 and 1 <= month <= 12 \
       and 1 <= day <= 31 and 0 <= hour < 24 \
       and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
            return 1
    

    还可以选择使用隐式行连接,通过使用圆括号或方括号或花括号;在为每个左括号或大括号找到匹配的右括号或大括号之前,Python 不会结束逻辑行。这是推荐的代码风格,你找到的示例应该写成:

    if ((i < len(words_and_emoticons) - 1 and item.lower() == "kind" and
            words_and_emoticons[i+1].lower() == "of") or
            item.lower() in BOOSTER_DICT):
        sentiments.append(valence)
        continue
    

    请参阅Python Style Guide (PEP 8)(但请注意例外情况;某些 Python 语句不支持 (...) 括号,因此此处可以使用反斜杠)。

    请注意,Python 并不是唯一使用反斜杠来续行的编程语言; bash、C 和 C++ 预处理器语法、Falcon、Mathematica 和 Ruby 也使用这种语法来扩展行;见Wikipedia

    【讨论】:

      【解决方案2】:

      在这种情况下,\ 正在转义下面的换行符。因为 Python 关心空格,所以这段代码使用它来允许代码在新行上继续。

      【讨论】:

        【解决方案3】:

        它用作换行符,因此if 条件可以写在下一行。

        【讨论】:

          【解决方案4】:

          为了便于阅读,它转义了行尾。 (将行扩展到下一行,因为 \n 字符不可见,但它具有语法意义。)

          【讨论】:

          • 老鼠,太慢了:-(
          【解决方案5】:

          反斜杠用于指示此if 条件中的换行符。 PEP8 说:

          反斜杠有时可能仍然合适。例如,长的、多个 with 语句不能使用隐式延续,所以反斜杠是可以接受的:

          with open('/path/to/some/file/you/want/to/read') as file_1, \
               open('/path/to/some/file/being/written', 'w') as file_2:
              file_2.write(file_1.read())
          

          除这些条件外,换行符通常由适当的缩进表示。

          编辑:

          显然with 语句是一个例外,它不允许仅通过缩进来换行,因此使用反斜杠,而if 不应与\ 一起使用。

          【讨论】:

          • 但是,这是在 if 声明中使用的,您可以通过在测试周围放置 (...) 括号来使用隐式延续。
          • 没错,你可以 ;) 但我认为这同样适用于iffor,即使你没有必须 使用反斜杠。
          • PEP8 在隐式延续可用时明确反对使用\with 语句在这里是一个例外。我更喜欢文档关于明确连续的行而不是我自己的 PEP 8。
          • 啊,好吧,我当时完全误解了这一点。谢谢!
          猜你喜欢
          • 2022-11-01
          • 2013-10-24
          • 2021-06-15
          • 1970-01-01
          • 2015-11-19
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多