将一行python代码分解为多行

2024-04-23 18:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

Tags: and代码informatfordataifnot
3条回答

这段代码正在收集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)

你可能想读一下list comprehensions。你知道吗

基本上就是列出这样的事情:
[item for item in iterable_thing]

所以这个是一个字符串列表("{}".format(a))。我假设a是一个散列,但让我们假设它是一个范围内的数字:
["{}".format(a) for a in range(5)]
将使:
>>>['0', '1', '2', '3', '4']

添加if语句会使理解变得相当复杂,而编写这段代码的人似乎就是那种a in b in i in j类型的人,所以他们的代码很难理解。好的变量名非常重要。你知道吗

好吧,一般来说,你可以看到任何开始括号和加号运算符在字符串中作为一个“断点”。使用您的示例:

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)

做最后一个阶段,有很多事情要回去,因为事情扩大了。这些列表的理解非常简洁。。。你知道吗

不过,这里有一些问题:

  • values从哪里来?你知道吗
  • 什么是"{}".format(a)?你知道吗

等等

您的“扩展”代码并不完全相同,因为您不处理没有匹配项的情况values是空的并且每次都替换data,而不是增加它。你知道吗

相关问题 更多 >