【问题标题】:How does Python's triple-quote string work?Python 的三引号字符串是如何工作的?
【发布时间】:2009-10-05 14:49:04
【问题描述】:

这个函数应该如何改成返回"123456"

def f():
    s = """123
    456"""
    return s

更新:大家,问题是理解如何在有多行注释时没有 \t 或其他什么,而不是如何使用 re 模块。

【问题讨论】:

  • 这是作业吗?提示:你的字符串是 "123456"
  • 这不是家庭作业。我试图了解""" 的工作原理。
  • 但是我怎么没有 \t 呢?
  • @cool-RR: 我们怎么知道你有\t
  • @SilentGhost:我猜一个了解 Python 如何与 """ 一起工作的人会立即看到我的字符串将包含一个 \t(或空格,在这个问题上是等效的)

标签: python string


【解决方案1】:

当您不想要额外的空格、制表符和换行符时,不要使用三引号字符串。

使用隐式延续,更优雅:

def f():
    s = ('123'
         '456')
    return s

【讨论】:

  • 这对我来说很自然,但不是当我不得不使用 ex:%s 插入变量值时,但唉,即使是以下工作:s = ('String %s ''String %s') %('foo', 'bar')
【解决方案2】:

随后的字符串被连接起来,所以你可以使用:

def f():
    s = ("123"
         "456")
    return s

这将使您可以随意保留缩进。

【讨论】:

  • OP 注释 - “123”和“456”之间没有逗号。 () 的存在是为了避免使用 '\' 进行续行。
【解决方案3】:
textwrap.dedent("""\
                123
                456""")

来自标准库。第一个“\”是必需的,因为此函数通过删除常见的前导空格来工作。

【讨论】:

【解决方案4】:
def f():
  s = """123\
456"""
  return s

不要在第一行之后缩进任何块引用行;以反斜杠结束除最后一行之外的每一行。

【讨论】:

  • +1:即使我不喜欢 bashslashes:可以使用 replace('\n','')
  • ... 而不是 {{{return s.replace('\n', '')}}},而是在赋值本身中:{{{456""".replace( '\n', '')}}}
【解决方案5】:

我的猜测是:

def f():
    s = """123
    456"""
    return u'123456'

最小的改变,做被要求的事。

【讨论】:

  • 可能被否决了,因为该函数应该返回一个字符串。
  • 你是对的,它可能必须返回一个字符串,我返回一个整数,反正我也没有得到反对的东西,我是 python 新手
  • 所以将最后一行更改为返回“123456”
  • 现在我重新阅读了这个问题,我知道为什么我的答案被否决了,问题是指“Python 的三引号字符串如何工作?”我的回答没有对此发表任何评论
【解决方案6】:

也许我遗漏了一些明显的东西,但是这个呢:

def f():
    s = """123456"""
    return s

或者简单地说:

def f():
    s = "123456"
    return s

甚至更简单:

def f():
    return "123456"

如果这不能回答你的问题,那么请澄清问题是关于什么的。

【讨论】:

  • 关于了解如何在有多行注释时没有 \t 或其他任何内容。
  • 三引号字符串不是多行注释,它是原始字符串,包含您输入的内容。
  • 从技术上讲,三引号字符串不是原始字符串,因为仍会解释反斜杠转义。它是一个普通的 python 字符串,其中保留了未转义的换行符(而不是导致解析错误)。您可以使用 r"""blabla""" 创建一个真正原始的三引号字符串。这对于制作需要同时包含单引号和双引号以及反斜杠的正则表达式模式很有用。
【解决方案7】:

您可能想查看此str.splitlines([keepends])

返回字符串中的行列表,在行边界处中断。 此方法使用通用换行方法来分割行。 换行符不包含在结果列表中,除非 keepends 是 给定的和真实的。

Python 将“\r”、“\n”和“\r\n”识别为 8 位字符串的行边界。

所以,对于手头的问题......我们可以做一些这样的事情......

>>> s = """123
... 456"""
>>> s
'123\n456'
>>> ''.join(s.splitlines())
'123456'

【讨论】:

    【解决方案8】:
    re.sub('\D+', '', s)
    

    会返回一个字符串,如果你想要一个整数,用int转换这个字符串。

    【讨论】:

      【解决方案9】:

      试试

      import re
      

      然后

          return re.sub("\s+", "", s)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-26
        • 2014-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-18
        相关资源
        最近更新 更多