我如何在Python中包装长行而不牺牲缩进?

例如:

def fun():
    print '{0} Here is a really long sentence with {1}'.format(3, 5)

假设这超过了79个字符的推荐限制。我阅读它的方式,这里是如何缩进它:

def fun():
    print '{0} Here is a really long \
sentence with {1}'.format(3, 5)

但是,使用这种方法,连续行的缩进与fun()的缩进匹配。这看起来有点丑。如果有人要检查我的代码,由于这个print语句,不均匀的缩进看起来会很糟糕。

如何在不牺牲代码可读性的情况下有效地缩进行呢?


当前回答

def fun():
    print(('{0} Here is a really long '
           'sentence with {1}').format(3, 5))

相邻的字符串文字在编译时连接,就像在c中一样。http://docs.python.org/reference/lexical_analysis.html#string-literal-concatenation是了解更多信息的好地方。

其他回答

你可以使用下面的代码,其中缩进不重要:

>>> def fun():
        return ('{0} Here is a really long'
        ' sentence with {1}').format(3, 5)

你只需要把字符串括在括号里。

def fun():
    print(('{0} Here is a really long '
           'sentence with {1}').format(3, 5))

相邻的字符串文字在编译时连接,就像在c中一样。http://docs.python.org/reference/lexical_analysis.html#string-literal-concatenation是了解更多信息的好地方。

你可以使用Python连接彼此相邻的字符串字面值的事实:

>>> def fun():
...     print '{0} Here is a really long ' \
...           'sentence with {1}'.format(3, 5)

我可能会将长语句拆分为多个更短的语句,以便程序逻辑与长字符串的定义分离:

>>> def fun():
...     format_string = '{0} Here is a really long ' \
...                     'sentence with {1}'
...     print format_string.format(3, 5)

如果字符串太长了,你选择了一个短的变量名,那么这样做你甚至可以避免拆分字符串:

>>> def fun():
...     s = '{0} Here is a really long sentence with {1}'
...     print s.format(3, 5)

我很惊讶上面没有人提到隐式风格。我的偏好是使用paren来包装字符串,同时在视觉上对齐字符串行。就我个人而言,我认为这看起来比在一个带标签的新行上开始字符串的开头更干净,更紧凑。

注意,这些paren不是方法调用的一部分——它们只是隐式的字符串字面值连接。

Python 2:

def fun():
    print ('{0} Here is a really '
           'long sentence with {1}').format(3, 5)

Python 3(带有打印函数的parens):

def fun():
    print(('{0} Here is a really '
           'long sentence with {1}').format(3, 5))

就我个人而言,我认为将连接长字符串文字与打印它分开是最干净的:

def fun():
    s = ('{0} Here is a really '
         'long sentence with {1}').format(3, 5)
    print(s)