Ray*_*ega 979 python syntax line-breaks long-lines
我有一长串代码,我希望在多行之间分解.我使用什么,语法是什么?
例如,添加一串字符串,
e = 'a' + 'b' + 'c' + 'd'
Run Code Online (Sandbox Code Playgroud)
并将它分成两行:
e = 'a' + 'b' +
'c' + 'd'
Run Code Online (Sandbox Code Playgroud)
Har*_*mbe 1110
什么是线?你可以在下一行有参数而没有任何问题:
a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5,
blahblah6, blahblah7)
Run Code Online (Sandbox Code Playgroud)
否则你可以这样做:
if a == True and \
b == False
Run Code Online (Sandbox Code Playgroud)
查看样式指南以获取更多信息.
从您的示例行:
a = '1' + '2' + '3' + \
'4' + '5'
Run Code Online (Sandbox Code Playgroud)
要么:
a = ('1' + '2' + '3' +
'4' + '5')
Run Code Online (Sandbox Code Playgroud)
请注意,样式指南表示使用括号的隐式延续是首选,但在这种特殊情况下,只是在表达式周围添加括号可能是错误的方法.
jfs*_*jfs 218
包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续.通过在括号中包装表达式,可以在多行中分割长行.这些应该优先使用反斜杠来继续行.
反斜杠有时可能仍然合适.例如,long,多个with语句不能使用隐式延续,因此可以接受反斜杠:
Run Code Online (Sandbox Code Playgroud)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())
另一个这样的情况是断言语句.
确保适当缩进续行.打破二元运算符的首选位置是运算符之后,而不是它之前.一些例子:
Run Code Online (Sandbox Code Playgroud)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)
编辑:PEP8现在推荐数学家及其出版商使用的相反惯例(用于打破二进制操作)以提高可读性.
Donald Knuth 在二元运算符之前的破坏风格垂直对齐运算符,从而在确定添加和减少哪些项目时减少了眼睛的工作量.
Donald Knuth在他的计算机和排版系列中解释了传统规则:"虽然段落中的公式总是在二元运算和关系之后中断,但显示的公式总是在二元运算之前中断"[3].
遵循数学传统通常会产生更易读的代码:
Run Code Online (Sandbox Code Playgroud)# Yes: easy to match operators with operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
在Python代码中,只要约定在本地一致,就允许在二元运算符之前或之后中断.对于新代码,建议使用Knuth的样式.
[3]:Donald Knuth的The TeXBook,第195和196页
Kon*_*lph 23
您可以在括号和大括号之间划分线条.此外,您可以将反斜杠字符附加\
到一行以显式断开它:
x = (tuples_first_value,
second_value)
y = 1 + \
2
Run Code Online (Sandbox Code Playgroud)
SCd*_*CdF 22
把\
你的一行放在最后,或者把这个陈述括在parens中( .. )
.来自IBM:
b = ((i1 < 20) and
(i2 < 30) and
(i3 < 40))
Run Code Online (Sandbox Code Playgroud)
要么
b = (i1 < 20) and \
(i2 < 30) and \
(i3 < 40)
Run Code Online (Sandbox Code Playgroud)
Jas*_*ete 20
从马的嘴:明确的线加入
可以使用反斜杠字符(
\
)将两条或更多条物理线连接到逻辑行中,如下所示:当物理线以不是字符串文字或注释的一部分的反斜杠结束时,它与以下形成一条逻辑线的连接,删除反斜杠和下面的行尾字符.例如:Run Code Online (Sandbox Code Playgroud)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
以反斜杠结尾的行不能发表评论.反斜杠不会继续发表评论.除了字符串文字之外,反斜杠不会继续使用标记(即除了字符串文字之外的标记不能使用反斜杠在物理行之间拆分).反斜杠在字符串文字外的一行上的其他地方是非法的.
Bra*_*ndt 14
还可以将方法 () 的调用分成obj.method()
多行。
将命令括在括号“ ()
”中并跨越多行:
> res = (some_object
.apply(args)
.filter()
.values)
Run Code Online (Sandbox Code Playgroud)
例如,我发现它在链上调用 Pandas/Holoviews 对象方法很有用。
jla*_*ens 10
如果您想因为文字字符串很长而中断您的行,您可以将该字符串分成几部分:
long_string = "a very long string"
print("a very long string")
Run Code Online (Sandbox Code Playgroud)
将被替换
long_string = (
"a "
"very "
"long "
"string"
)
print(
"a "
"very "
"long "
"string"
)
Run Code Online (Sandbox Code Playgroud)
两个打印语句的输出:
a very long string
注意做作中的括号。
另请注意,将文字字符串分成几部分允许仅在字符串的一部分上使用文字前缀并混合分隔符:
s = (
'''2+2='''
f"{2+2}"
)
Run Code Online (Sandbox Code Playgroud)
它可能不是 Pythonic 的方式,但我通常使用带有 join 函数的列表来编写长字符串,例如 SQL 查询:
query = " ".join([
'SELECT * FROM "TableName"',
'WHERE "SomeColumn1"=VALUE',
'ORDER BY "SomeColumn2"',
'LIMIT 5;'
])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1436414 次 |
最近记录: |