假设:
e = 'a' + 'b' + 'c' + 'd'
如何将上述内容写成两行?
e = 'a' + 'b' +
'c' + 'd'
假设:
e = 'a' + 'b' + 'c' + 'd'
如何将上述内容写成两行?
e = 'a' + 'b' +
'c' + 'd'
什么是代码行?在下一行中只要有参数就不会有任何问题:
a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5,
blahblah6, blahblah7)
否则,您可以像这样做: 否则,您可以这样处理:
if (a == True and
b == False):
或者使用显式的换行符:
if a == True and \
b == False:
查看风格指南以获取更多信息。
使用括号,您的示例可以写在多行中:
a = ('1' + '2' + '3' +
'4' + '5')
通过显式换行符,也可以达到同样的效果:
a = '1' + '2' + '3' + \
'4' + '5'
请注意,样式指南表示在括号的隐式续行符中使用是首选的,但在这种特定情况下,仅在表达式周围添加括号可能是错误的方法。
首选方法是使用Python中的括号、方括号和花括号来换行。可以通过在括号中包装表达式来将长行分成多行。这应该优先于使用反斜杠进行行连续。
有时仍然可以使用反斜杠。例如,长的多个with语句无法使用隐式连续性,因此可以接受使用反斜杠:
请确保适当缩进延续的行。二元运算符的首选断行位置是在运算符之后而不是之前。以下是一些示例:
with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read())
Another such case is with assert statements.
class Rectangle(Blob):
def __init__(self, width, height,
color='black', emphasis=None, highlight=0):
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong' or
highlight > 100):
raise ValueError("sorry, you lose")
if width == 0 and height == 0 and (color == 'red' or
emphasis is None):
raise ValueError("I don't think so -- values are %s, %s" %
(width, height))
Blob.__init__(self, width, height,
color, emphasis, highlight)file_2.write(file_1.read())
PEP8现在推荐使用数学家及其出版商使用的相反约定(在二元操作符处换行)来提高可读性。
唐纳德·克努斯(Donald Knuth)的风格是在二元运算符之前换行,使运算符垂直对齐,从而减轻眼睛在确定哪些项目被加减时的工作量。
唐纳德·克努斯在他的《计算机和排版系列》中解释了传统规则:“虽然段落中的公式总是在二元运算和关系之后断开,但显示的公式总是在二元运算符之前断开”[3]。
遵循来自数学的传统通常会导致更易读的代码:
# Yes: easy to match operators with operands
income = (gross_wages
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)
set list listchars=trail:·
等类似命令。 :) - Beau在您的行末添加\
或将该语句括在括号( .. )
中。来自IBM:
b = ((i1 < 20) and
(i2 < 30) and
(i3 < 40))
或者b = (i1 < 20) and \
(i2 < 30) and \
(i3 < 40)
您可以在括号和大括号之间换行。此外,您还可以在一行末尾附加反斜杠字符\
以显式地换行:
x = (tuples_first_value,
second_value)
y = 1 + \
2
\
)将两个或多个物理行连接成逻辑行,如下所示:当一个物理行以非字符串文字或注释的一部分的反斜杠结尾时,它与以下行连接成为单个逻辑行,删除反斜杠和以下的换行符。例如:if 1900 < year < 2100 and 1 <= month <= 12 \
and 1 <= day <= 31 and 0 <= hour < 24 \
and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date
return 1
以反斜线结尾的行不能包含注释。反斜线不能延续注释。除了字符串文本(即,除字符串文本之外的标记不能使用反斜线跨越物理行拆分),反斜线不会延续标记。在字符串文本之外的行上,反斜线是非法的。
如果你因为一个很长的字符串而想要换行,你可以将该字符串分解成多个部分:
long_string = "a very long string"
print("a very long string")
将被替换为
long_string = (
"a "
"very "
"long "
"string"
)
print(
"a "
"very "
"long "
"string"
)
两个打印语句的输出结果:
一个很长的字符串
注意赋值语句中的括号。
还要注意,将字面字符串分成多个部分允许仅在字符串的某些部分使用字面前缀并混合分隔符:
s = (
'''2+2='''
f"{2+2}"
)
还可以将方法的调用 (obj.method()
) 拆分为多行。
将命令括在括号“()
”内并跨越多行:
> res = (some_object
.apply(args)
.filter()
.values)
例如,我发现在链式调用Pandas/Holoviews对象方法时非常有用。
可能不是Pythonic的方式,但我通常使用带有join函数的列表来编写长字符串,例如SQL查询:
query = " ".join([
'SELECT * FROM "TableName"',
'WHERE "SomeColumn1"=VALUE',
'ORDER BY "SomeColumn2"',
'LIMIT 5;'
])
from app import (
app, abort, make_response, redirect, render_template, request, session
)