将一行python代码拆分为多行

将一行python代码拆分为多行,python,python-3.x,Python,Python 3.x,如何将一行代码分解为多个描述性行,因为我无法理解这一行代码 data = formatted_data + "|" + '|'.join(["{}".format(a) for b, a in sorted(values.items()) if a and b not in ['SecureHash']]) 这是正确的还是错误的?有人帮我: for b, a in sorted(values.items()): if a and b not in ['SecureHash']:

如何将一行代码分解为多个描述性行,因为我无法理解这一行代码

data = formatted_data + "|" + '|'.join(["{}".format(a) for b, a in sorted(values.items()) if a and b not in ['SecureHash']])
这是正确的还是错误的?有人帮我:

for b, a in sorted(values.items()):
    if a and b not in ['SecureHash']:
        c = ["{}".format(a)]
        data = formatted_data + "|" + "|".join(c)

你可能想好好读一读

基本上,它是在列出这样的事情:
[iterable\u thing中的项目对应项目]

因此,这是一个字符串列表(
“{}.format(a)
)。我假设
a
是一个散列,但让我们假设它是一个范围内的数字:
[“{}”。范围(5)内a的格式(a)]

将使:
>>['0','1','2','3','4']


如果添加
if
语句,理解就会变得相当复杂,而编写此代码的人似乎是
a in b in i in j
这类人中的一员,因此他们的代码很难理解。好的变量名非常重要。

此代码正在收集
a
的字符串表示形式,然后用它构建另一个字符串

您需要定义一个外部列表,以解释列表理解表达式

c = ["{}".format(a) for b, a in sorted(values.items()) if a and b not in ['SecureHash']]
此外,要分解如何组装
c
,您可以展开列表:

c = []
for b, a in sorted(values.items()):
    if a and b not in ['SecureHash']:
        c.append('{}'.format(a))
最后,将三个部分结合起来:

data = formatted_data + "|" + "|".join(c)

一般来说,你可以看到字符串中的任何开口括号和加号操作符都是一个“断点”。使用您的示例:

data = formatted_data
data += "|"
data += '|'.join(["{}".format(a) for b, a in sorted(values.items()) if a and b 
not in ['SecureHash']])
好的,现在我们需要解包该联接中发生的情况:

data = formatted_data
data += "|"
jointmp = ["{}".format(a) for b, a in sorted(values.items()) if a and b not in ['SecureHash']]
data += '|'.join(jointmp)
好的,我们有一些字符串格式和一些列表理解:

data = formatted_data
data += "|"

jointmp = []
for b, a in sorted(values.items()):
  if a and b not in ['SecureHash']:
      jointmp += ["{}".format(a)] # Equivalent to str(a) ?

data += '|'.join(jointmp)
在做最后一个阶段时,随着事情的扩大,有很多事情要做。那些列表的理解非常简洁

但这里有一些问题:

  • 值从何而来
  • 什么是
    “{}”。格式(a)
等等


您的“扩展”代码并不完全相同,因为您不处理没有匹配项的情况/
为空,并且每次都替换
数据
,而不是增加数据。

()
之间的换行符是合法的,因此您可以在第一次
加入后按Enter键(
例如,您的代码似乎是正确的唯一一件事是,如果您想将c用作列表,您可以将其用作
c=[a]
或将c赋值更改数据删除为
data=formatted_data+“|”+“|”。join([a])
此外,该函数首先使用该理解创建一个列表,然后将列表中的项目与管道字符连接起来,
——因此这一行:
“|”+“|”。连接([{}.format(a)表示范围(5)]
将输出:
>“| 0 | 1 | 2 | 3 | 4”
谢谢@Burhan Khalid。