语法允许多个if语句,因为你可以将它们与for循环混合使用:
[j for i in range(100) if i > 10 for j in range(i) if j < 20]
理解组件应被视为嵌套语句,上述内容可翻译为:
lst = []
for i in range(100):
if i > 10:
for j in range(i):
if j < 20:
lst.append(j)
这也意味着您可以在没有for
循环的情况下使用多个if
语句:
[i for i in range(100) if i > 10 if i < 20]
虽然毫无意义(只是使用and
或链式运算符将它们组合起来),但它仍然可以翻译成一个合法的嵌套语句:
尽管没有意义(只是通过使用
and
运算符或链接运算符把它们组合在一起),但仍然可以转化为合法的嵌套语句:
lst = []
for i in range(100):
if i > 10:
if i < 20:
lst.append(i)
语法和解析器并没有特别禁止这种用法,就像Python不会禁止你嵌套if
语句一样。
注意PEP 202 - 列表推导式(最初将该功能添加到语言中的提案文档)实际上在示例部分包括了一个双重if推导式:
>>> print [(i, f) for i in nums for f in fruit if f[0] == "P" if i%2 == 1]
[(1, 'Peaches'), (1, 'Pears'), (3, 'Peaches'), (3, 'Pears')]
if 10 < i < 50
。 - tobias_kand
运算符附近具有惰性求值的特性,因此您可以在and
左侧进行健全性检查,以防止对右侧的求值。 - Emil Vikström