【问题标题】:Why does Python automatically combine two separate strings, if you forget the comma? [duplicate]为什么 Python 会自动组合两个单独的字符串? [复制]
【发布时间】:2015-09-04 13:28:34
【问题描述】:

如果您忘记了字符串列表中的逗号,Python (2.7) 将自动连接两个字符串。例如:

x = ['id', 'date' 'time']
print(x)
#[id, 'datetime']

这种行为似乎与用户忘记逗号的绝大多数“用例”相反。这会导致代码中丢失错误或收到奇怪的错误消息。例如,在上面的示例中,这是一个对象的属性列表,它抛出了AttributeError: 'YourObjectClass' object has no attribute 'datetime'。这是一个功能还是一个错误,如果它是一个功能,为什么它是一个功能?

【问题讨论】:

  • 此行为不仅在列表中。试试x = 'date' 'time'
  • 在 C 语言中:为了允许更灵活的布局并解决一些预处理问题,C89 委员会引入了字符串文字连接。将一行中的两个字符串文字粘贴在一起,中间没有空字符,以组成一个组合字符串文字 ...C 语言的这一添加允许程序员将字符串文字扩展到物理的末尾之外行而不必使用反斜杠换行机制”我怀疑Python有同样的理由,即减少丑陋的\以继续长字符串文字。

标签: python string


【解决方案1】:

这是一个特性,其原理在the part of the spec that describes it中给出:

允许多个相邻的字符串文字(由空格分隔),可能使用不同的引用约定,并且它们的含义与它们的连接相同。因此,"hello" 'world' 等价于"helloworld"。此功能可用于减少所需的反斜杠数量,方便地将长字符串拆分为长行,甚至可以将 cmets 添加到部分字符串中,例如:

re.compile("[A-Za-z_]"       # letter or underscore
           "[A-Za-z0-9_]*"   # letter, digit or underscore
          )

【讨论】:

    【解决方案2】:

    这是一个称为字符串文字连接的功能。

    字符串文字连接

    多个相邻的字符串文字(由空格分隔),可能 允许使用不同的引用约定,它们的含义是 与它们的串联相同。因此,"hello"'world' 是等价的 到"helloworld"。此功能可用于减少 需要反斜杠,以便将长字符串方便地拆分为长字符串 行,甚至将 cmets 添加到部分字符串中:

    re.compile("[A-Za-z_]"       # letter or underscore
               "[A-Za-z0-9_]*"   # letter, digit or underscore
              )
    

    此功能在句法级别定义,但在编译时实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2017-04-15
      • 2013-10-21
      • 2023-03-27
      • 1970-01-01
      • 2022-11-20
      相关资源
      最近更新 更多