【问题标题】:Python here document without newlines at top and bottomPython here 文档在顶部和底部没有换行符
【发布时间】:2012-03-24 06:17:23
【问题描述】:

在顶部和底部没有换行符的此处文档的最佳方式是什么?例如:

print '''
dog
cat
'''

在顶部和底部会有换行符,为了摆脱它们,我必须这样做:

print '''dog
cat'''

我发现它的可读性要差得多。

【问题讨论】:

  • print '''\ dog cat\ ''' 就像做续行一样

标签: python string printing heredoc


【解决方案1】:

这个怎么样?

print '''
dog
cat
'''[1:-1]

或者只要第一行没有缩进或最后一行没有尾随空格:

print '''
dog
cat
'''.strip()

或者甚至,如果您不介意字符串前后多一些杂乱以换取能够很好地缩进:

from textwrap import dedent

...

print dedent('''
    dog
    cat
    rabbit
    fox
''').strip()

【讨论】:

  • 我认为你的第一种方法是最优雅的,因为你只影响第一个和最后一个空白字符。我之前通过函数调用使用了 strip。
【解决方案2】:

在不需要的行末尾添加反斜杠\:

 text = '''\
 cat
 dog\
 '''

它更具可读性。

【讨论】:

  • dog 行末尾的反斜杠使其消失。由于这不是一个原始字符串,\[newline] 被缩减为空
  • 当变量赋值缩进比模块级别更深时(例如类的方法),它最终看起来非常有趣。
  • 谢谢,正是我想要的。我在 Ruby 和 Bash 中使用 here docs(在第一行之前不添加换行符),用 [1:] 或 strip() 删除它似乎不优雅。
  • 是的,但这并不是一个的文档。无论如何,好主意,有些人可能会喜欢它。
  • Python 3 的行为是否发生了变化?至少对于原始字符串,它似乎不再起作用了。
【解决方案3】:

使用括号:

print (
'''dog
cat'''
)

使用str.strip()

print '''
dog
cat
'''.strip()

使用str.join()

print '\n'.join((
    'dog',
    'cat',
    ))

【讨论】:

  • Parens 我认为是要走的路。可读性强,比strip方法更简洁,对于长块比\n更可读,而且似乎符合官方编码标准。
【解决方案4】:

你可以使用strip():

print '''
dog
cat
'''.strip()

【讨论】:

    【解决方案5】:

    在第一行的开头使用反斜杠来避免第一个换行符,并在末尾使用“end”修饰符来避免最后一个:

        print ('''\
        dog
        cat
        ''', end='')
    

    【讨论】:

      【解决方案6】:

      你真的需要多行语法吗?为什么不直接嵌入换行符?

      我发现 print "dog\ncat" 比任何一个都更具可读性。

      【讨论】:

      • 里程不同。他在问heredoc,所以让我们给他吧:)
      • 很确定他想打印的不仅仅是猫狗。我知道这就是我在这里的原因
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2010-11-16
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多