python-3.x 是什么导致“三重引号”改变缩进?

biswetbf  于 2022-12-14  发布在  Python
关注(0)|答案(5)|浏览(230)

我使用三重引号创建一个多行字符串:

print(
    ''' Hello!
        How are
        you?''')

输出:

Hello!
        How are
        you?

在字符串内部,How正好位于Hello的下方。
然而,我不能够理解是什么导致缩进发生变化。

6g8kf2rb

6g8kf2rb1#

要回答这个问题,字符串内的空格数是完全正确的,三重引号是不改变缩进的。
要回答这个问题背后的问题,如果要删除 common 前导空格,以便多行字符串在源代码中仍然整齐排列,请使用textwrap.dedent

>>> print(dedent('''\
...           Hello!
...           How are
...           you?'''))
Hello!
How are
you?

您可能也有兴趣关注Compile time textwrap.dedent() equivalent for str or bytes literals

iih3973s

iih3973s2#

当您像这样使用三重引号时,生成的字符串将包含三重引号之间的所有字符,包括空格和换行符。
那么,让我们再看看你的代码。它看起来像这样:

''' Hello!
        How are
        you?'''

如果我们仔细观察这段代码,我们可以看到它由以下内容组成:

  • 4个空格
  • 三重引号'''
  • 1个空格
  • 单词Hello!
  • 换行符
  • 8个空格
  • 单词How are
  • 换行符
  • 8个空格
  • 单词you?
  • 三引号'''

因此,生成的字符串将包含三重引号之间的所有字符,即:

  • 1个空格
  • 单词Hello!
  • 换行符
  • 8个空格
  • 单词How are
  • 换行符
  • 8个空格
  • 单词you?

如你所见,这正是打印出来的。

dwbf0jvd

dwbf0jvd3#

让我们看看Python文档:
Python中的文本数据是用str对象或字符串来处理的。字符串是Unicode码位的不可变序列。字符串常量有多种编写方式:
单引号:'允许嵌入“双”引号'
双引号:“允许嵌入”单“引号”。
三重引用:“”“三个单引号”"“,“““三个双引号”””
用三重引号括起来的字符串可以跨多行-所有相关的空格都将包含在字符串文字中。
我不确定您想要的输出是什么,但简短的回答是Python按字面解释三引号内的空格;这就是为什么它包含在打印输出中。

svgewumm

svgewumm4#

三引号准确表示您所写的内容,如下所示:

无空格和无缩进〉:

test = """<= No spaces with no indentatoins
<= No spaces with no indentatoins
"""

print(test)

输出:

<= No spaces with no indentatoins
<= No spaces with no indentatoins

一些空格和一些缩进〉:

test = """  
  <= 2 spaces with 1 indentation
    
    
    <= 4 spaces with 2 indentations
"""
       
print(test)

输出:

<= 2 Spaces with 1 indentation
    
    
    <= 4 spaces with 2 indentations

在某种程度上,三重引号类似于HTML中的<pre></pre>,如下所示:

<pre>
<= No spaces with no indentatoins
<= No spaces with no indentatoins
</pre>
<pre>

  <= 2 Spaces with 1 indentation

    <= 4 spaces with 2 indentations
</pre>
bttbmeg0

bttbmeg05#

试试这个

print(f''' 
Hello!
How are
you?''')

相关问题