是否有可能在Python中将长行分成多行

Bin*_*hen 526 python

就像C一样,你可以将一条长线分成多条短线.但是在Python中,如果我这样做,会出现缩进错误......是否可能?

Dar*_*rov 613

PEP 8 - Python代码风格指南:

包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续.如有必要,您可以在表达式周围添加一对额外的括号,但有时使用反斜杠看起来更好.确保适当缩进续行.

隐式行继续的示例:

a = some_function(
    '1' + '2' + '3' - '4')
Run Code Online (Sandbox Code Playgroud)

关于二元运算符周围的换行主题,它继续说: -

几十年来,推荐的风格是在二元运算符之后打破.但这会以两种方式损害可读性:运算符往往分散在屏幕上的不同列中,并且每个运算符都会从其操作数移到前一行.

在Python代码中,只要约定在本地一致,就允许在二元运算符之前或之后中断.对于新代码,建议使用Knuth的样式(操作符的换行符).

显式行继续的示例:

a = '1'   \
    + '2' \
    + '3' \
    - '4'
Run Code Online (Sandbox Code Playgroud)

  • 对于第二个例子,它不喜欢'\'之后的空格(你看不到) (21认同)

use*_*312 213

有不止一种方法可以做到这一点.

1).长篇陈述:

>>> def print_something():
         print 'This is a really long line,', \
               'but we can make it across multiple lines.'
Run Code Online (Sandbox Code Playgroud)

2).使用括号:

>>> def print_something():
        print ('Wow, this also works?',
               'I never knew!')
Run Code Online (Sandbox Code Playgroud)

3).\再次使用:

>>> x = 10
>>> if x == 10 or x > 0 or \
       x < 100:
       print 'True'
Run Code Online (Sandbox Code Playgroud)

引用PEP8:

包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续.如有必要,您可以在表达式周围添加一对额外的括号,但有时使用反斜杠看起来更好.确保适当缩进续行.打破二元运算符的首选位置是运算符之后,而不是它之前.

  • 最后一句提到破坏 _after_ 运算符,与 [PEP8](https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after- a-binary-operator) 建议打破 _before_ 运算符以提高可读性。 (3认同)

acg*_*ant 26

如果要为变量分配长str,可以按如下方式执行:

net_weights_pathname = (
    '/home/acgtyrant/BigDatas/'
    'model_configs/lenet_iter_10000.caffemodel')
Run Code Online (Sandbox Code Playgroud)

不要添加任何逗号,否则你会得到一个包含许多strs的元组!

  • 这是有效的,因为python自动连接括号内的字符串,而不需要放置一个`+`运算符. (4认同)

Aby*_*byx 16

它也适用于Python:

>>> 1+\
      2+\
3
6
>>> (1+
          2+
 3)
6
Run Code Online (Sandbox Code Playgroud)


kot*_*beg 13

当尝试输入连续文本(例如,查询)时,不要在行尾添加逗号,否则您将获得字符串列表而不是一个长字符串:

queryText= "SELECT * FROM TABLE1 AS T1"\
"JOIN TABLE2 AS T2 ON T1.SOMETHING = T2.SOMETHING"\
"JOIN TABLE3 AS T3 ON T3.SOMETHING = T2.SOMETHING"\
"WHERE SOMETHING BETWEEN <WHATEVER> AND <WHATEVER ELSE>"\
"ORDER BY WHATEVERS DESC"
Run Code Online (Sandbox Code Playgroud)

有点像那样.

有这样的评论acgtyrant,抱歉,没有看到.:/

  • 这是行不通的——你需要在每个引用字符串的开头或结尾有一些空格。目前“T1”和“JOIN”之间没有空格。在上面的例子中,只要使用带有`'''`或`"""`的多行字符串,SQL就不会介意CR/LF。 (2认同)

Mic*_*kis 8

据我所知,可以做到.对于三引号字符串("""like this"""),Python具有隐式行连续(括号内,括号和字符串),并且连续行的缩进并不重要.有关更多信息,您可能需要阅读python.org上关于词法分析的这篇文章.

  • 字符串只在三引号字符串中进行隐式延续.这是三重和单引号之间的区别. (3认同)

Dow*_*eam 6

与数据库相关的代码看起来很容易在多行中用双引号引起来:

SQL = """SELECT
            id, 
            fld_1, 
            fld_2, 
            fld_3, 
            ...... 
         FROM some_tbl"""
Run Code Online (Sandbox Code Playgroud)

比以下一条巨长线:

SQL = "SELECT id, fld_1, fld_2, fld_3, .................................... FROM some_tbl"
Run Code Online (Sandbox Code Playgroud)

  • 这只是一种解决方法,但使用文档字符串作为字符串并不是 Pythonic 的编码方式。 (2认同)
  • @Mohammad这只是普通的[三引号字符串](https://docs.python.org/3/glossary.html#term-triple-quoted-string),而不是[docstring](https:// docs .python.org / 3 / glossary.html#term-docstring)。 (2认同)