如何在 Python 中执行换行(行继续)(拆分一长行源代码)?

2024-11-25 08:49:00
admin
原创
164
摘要:问题描述:鉴于:e = 'a' + 'b' + 'c' + 'd' 我怎样才能用两行来写上述内容?e = 'a' + 'b' + 'c' + 'd' 另请参阅:如何将长字符串的定义拆分为多行?如果代码中有一个长字符串文字需要分解才能很好地换行。解决方案 1:这行是什么?你可以在下一行输入参数而不会出现...

问题描述:

鉴于:

e = 'a' + 'b' + 'c' + 'd'

我怎样才能用两行来写上述内容?

e = 'a' + 'b' +
    'c' + 'd'

另请参阅:如何将长字符串的定义拆分为多行?如果代码中有一个长字符串文字需要分解才能很好地换行。


解决方案 1:

这行是什么?你可以在下一行输入参数而不会出现任何问题:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

否则你可以做这样的事情:

if (a == True and
    b == False):

或者使用明确的换行符:

if a == True and \n   b == False:

查看样式指南以了解更多信息。

使用括号,您的示例可以写在多行上:

a = ('1' + '2' + '3' +
    '4' + '5')

使用显式换行可以获得相同的效果:

a = '1' + '2' + '3' + \n    '4' + '5'

请注意,样式指南指出最好使用带括号的隐式延续,但在这种特殊情况下,仅在表达式周围添加括号可能是错误的做法。

解决方案 2:

来自PEP 8——Python 代码样式指南

换行较长的行的首选方法是使用 Python 的隐式行续行符(在括号、中括号和大括号内)。可以将表达式放在括号内,从而将较长的行拆分为多行。应优先使用这些符号,而不是使用反斜杠进行行续行。

有时反斜杠可能仍然合适。例如,长的多个 with 语句不能使用隐式延续,因此反斜杠是可以接受的:

with open('/path/to/some/file/you/want/to/read') as file_1, \n>      open('/path/to/some/file/being/written', 'w') as file_2:
     file_2.write(file_1.read())

另一个这样的情况是使用断言语句。

确保适当缩进续行。二元运算符周围的首选换行位置是运算符之后,而不是之前。以下是一些示例:

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) 在二元运算符前打破的风格将运算符垂直对齐,从而在确定添加和减去哪些项时减少了眼睛的工作量。

来自PEP8:应该在二元运算符之前还是之后换行?

唐纳德·克努斯 (Donald Knuth) 在他的《计算机和排版》系列中解释了这一传统规则:“尽管段落内的公式总是在二元运算和关系之后中断,但显示的公式总是在二元运算之前中断”[3]。

遵循数学的传统通常会产生更易读的代码:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

在 Python 代码中,允许在二元运算符之前或之后中断,只要约定在本地保持一致即可。对于新代码,建议采用 Knuth 的风格。

解决方案 3:

使用反斜杠来结束一行的危险在于,如果在反斜杠后添加了空格(当然,这很难看到),反斜杠就不再发挥您想象的作用了。

有关详细信息,请参阅 Python 习语和反习语(适用于Python 2或Python 3)。

解决方案 4:

将 放在`行末或将语句括在括号中( .. )`。来自IBM:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

或者

b = (i1 < 20) and \n    (i2 < 30) and \n    (i3 < 40)

解决方案 5:

您可以在括号和大括号之间换行。此外,您还可以将反斜杠字符附加``到行以明确换行:

x = (tuples_first_value,
     second_value)
y = 1 + \n    2

解决方案 6:

来自权威的消息:显式线路连接

可以使用反斜杠字符 ( ) 将两个或多个物理行连接成逻辑行``,如下所示:当物理行以不是字符串文字或注释一部分的反斜杠结尾时,它将与后面的行连接起来形成单个逻辑行,删除反斜杠和后面的行尾字符。例如:

if 1900 < year < 2100 and 1 <= month <= 12 \n>    and 1 <= day <= 31 and 0 <= hour < 24 \n>    and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

以反斜杠结尾的行不能带有注释。反斜杠不会延续注释。反斜杠不会延续除字符串文字之外的标记(即,除字符串文字之外的标记不能使用反斜杠跨物理行拆分)。在字符串文字之外的行上,反斜杠是非法的。

解决方案 7:

如果由于字符串过长而想断行,可以将字符串拆分成几部分:

long_string = "a very long string"
print("a very long string")

将被取代

long_string = (
  "a "
  "very "
  "long "
  "string"
)
print(
  "a "
  "very "
  "long "
  "string"
)

两个打印语句的输出:

a very long string

请注意矫揉造作中的括号。

还要注意,将文字字符串分成几部分允许仅在字符串的部分上使用文字前缀并混合分隔符:

s = (
  '''2+2='''
  f"{2+2}"
)

解决方案 8:

还可以将方法调用分成obj.method()多行()。

将命令括在括号“ ()”中并跨越多行:

> res = (some_object
         .apply(args)
         .filter()
         .values)

例如,我发现它在链式调用 Pandas/Holoviews 对象方法时很有用。

解决方案 9:

这可能不是 Python 的方式,但我通常使用带有连接函数的列表来编写长字符串,就像 SQL 查询一样:

query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

解决方案 10:

摘自《Python 漫游指南》(行继续):

当逻辑代码行超过可接受的限制时,您需要将其拆分为多个物理行。如果行的最后一个字符是反斜杠,Python 解释器将连接连续的行。这在某些情况下很有用,但通常应避免使用它,因为它很脆弱:在行尾的反斜杠后添加空格会破坏代码并可能导致意外结果。

更好的解决方案是使用括号括住元素。如果行尾的括号未闭合,Python 解释器将连接下一行,直到括号闭合。花括号和方括号的行为相同。

然而,很多时候,必须分割较长的逻辑行表明您试图同时做太多事情,这可能会影响可读性。

话虽如此,这里有一个考虑多个导入的示例(当超过PEP-8 上定义的行限制时),也适用于一般字符串:

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1642  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1373  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,推动我国数字经济的高质量发展。在金融行业,信创的应用具有极其重要的意义。金融作为国家经济的核心领域,其安全稳定运行关乎国计民生。随着国际形势的变化和信息技术的飞速发展,金融行业对自主创新、安全可靠的信息技术需求愈发迫切。国货国用信创在金融行业的应用,不仅能够...
信创产品有哪些   0  
  信创技术,即信息技术应用创新产业技术,涵盖了从芯片、服务器、操作系统到数据库、中间件等一系列基础软硬件领域。近年来,信创技术发展迅猛,正以前所未有的态势渗透到传统制造业的各个环节,深刻改变着传统制造业的格局。传统制造业长期以来依赖于传统的生产模式、管理方式以及技术架构,在全球经济环境变化、市场竞争加剧的背景下,面临着转...
信创软件有哪些   0  
  信创产业作为近年来备受瞩目的领域,正深刻影响着全球科技格局与经济发展走向。它不仅仅是信息技术的创新应用,更是国家战略安全、产业转型升级的关键支撑。在数字化浪潮席卷而来的当下,信创产业的发展态势成为各界关注焦点。对其未来5年发展趋势进行预测,有助于我们提前布局、把握机遇,在这场科技变革中占据有利位置。技术创新引领产业升级...
国产化信创什么意思   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用