gpt4 book ai didi

python - 不一致的理解语法?

转载 作者:太空狗 更新时间:2023-10-29 17:54:29 26 4
gpt4 key购买 nike

我只是无意中发现了 python 语法中的一个缺陷——或者我遗漏了什么。

看这个:

[x for x in range(30) if x % 2 == 0]

但这是一个语法错误:

[x for x in range(30) if x % 2 == 0 else 5]

如果你有一个else子句,你必须这样写:

[x if x % 2 == 0 else 5 for x in range (30)]

但这是一个语法错误:

[x if x %2 == 0 for x in range(30)]

我错过了什么?为什么会如此不一致?

最佳答案

你在这里混合语法。这里有两个不同的概念:

  • 列表理解语法。这里if充当过滤器;是否在迭代中包含一个值。没有 else ,因为这已经是“不包括”的情况。

  • A conditional expression .这必须始终返回一个值,即“真”或“假”表达式的结果。

记住:列表理解从循环中产生一系列值。通过使用 if您可以控制输入可迭代对象中有多少元素用于输出。

另一方面,条件表达式的工作方式与任何其他表达式一样:一个表达式总是产生一个结果;条件表达式让您可以在两种可能的结果之间进行选择。但是因为它必须产生一个结果,所以你不能在没有 else 的情况下写一个结果部分。

请注意,表达式可以而且经常嵌套。条件表达式本身包含三个子表达式:

expr1 if expr2 else expr3
# ^ ^
# \ used when expr2 |
# is true |
# /
# used when expr2 is
# false

列表理解也包含子表达式。开头的那个(在 for <target> in <iterable> 部分之前)是每次迭代执行的子表达式,以在输出列表中生成值。迭代器表达式(在 in 之后)是另一个。可选的 if filter 也需要一个表达式。如果您愿意,可以在任何这些地方使用条件表达式。但是,这并不意味着您可以添加额外的 else在没有条件表达式语法的其他部分的情况下进行列表推导。

关于python - 不一致的理解语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20025280/

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