gpt4 book ai didi

python - 解释 python 段

转载 作者:太空狗 更新时间:2023-10-30 02:22:59 25 4
gpt4 key购买 nike

我是 python 的新手,遇到了这段代码。有人可以帮我解决这里的语法问题吗?也许在每一行上提供一些关于它如何工作的评论? xs 是一个包含日期的列表。

    data = {}

for title, d in tmpdata.items():

data[title] = [x in d and d[x][statid] or 0 for x in xs]
data[title][-1] = maxs[statid]

最佳答案

如果非要我猜的话,我会说对 Python 新手来说最令人困惑的行一定是:

data[title] = [x in d and d[x][statid] or 0 for x in xs]

这里发生了很多事情,其中​​一些使用了一种风格,虽然在这种情况下是安全的,但不再推荐。这是一个更详细的形式:

data[title] = []
for x in xs:
if x in d and d[x][statid]:
data[title].append(d[x][statid])
else:
data[title].append(0)

构造 condition and value-if-condition-is-true or value-if-condition-is-false 是 C 三元形式 condition 的旧式形式? value-if-condition-is-true :value-if-condition-is-false。给定的 Python 表达式隐藏了一个潜在的错误,如果 value-if-condition-is-true 被 Python 评估为“false-y”值 - 0, [] , () 都是在条件表达式中使用时会被视为 false 的值,因此如果您的 value-if-condition-is-true 结果为成为其中之一。正如在这种情况下发生的那样,如果 d[x][statid] 为 0,那么我们将假设结果为 False 并继续将 0 添加到列表中,这是正确的做法无论如何做。如果我们只能编辑冗长的形式,最简单的方法就是删除 和 d[x][statid],如下所示:

data[title] = []
for x in xs:
if x in d:
data[title].append(d[x][statid])
else:
data[title].append(0)

或者使用新的 Python 三元形式(这让一些人感到皮疹,但我已经习惯了它 - 三元形式,而不是皮疹),写成:

value-if-condition-is-true if condition else value-if-condition-is-false

或者代入我们的冗长形式:

data[title] = []
for x in xs:
data[title].append(d[x][statid] if x in d else 0)

最后,列表理解部分。每当你有这种循环时:

listvar = []
for some-iteration-condition:
listvar.append(some-iteration-dependent-value)

您可以将其重写为:

listvar = [some-iteration-dependent-value for some-iteration-condition]

这种形式称为列表理解。它通过遵循迭代条件并评估每次迭代的值来创建列表。

现在您可以看到原始语句是如何编写的。由于旧式 condition 和 true-value 或 false-value 中可能固有的潜在错误,三元形式或显式 if-then-else 是现在的首选样式。今天的代码应该写成:

data[title] = [d[x][statid] if x in d else 0 for x in xs]

关于python - 解释 python 段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7280033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com