我不明白为什么在python中允许这样做?
let arr =
[
{ id: "1"},
{ id: "2"},
{ id: "3"}
]
如果没有语法错误,应该没有其他吗? else每次也会运行(如果for进行了迭代),因此它没有连接。
arr.map(x => x.id);
答案 0 :(得分:4)
来自 docs
* else子句在循环正常完成后执行。这意味着循环没有遇到break语句。*
因此,这在您执行for循环但不知道该元素是否会在循环中找到/在循环中返回true时很有用。因此,如果找到/ true,则可以添加break语句退出循环,如果找不到/ true,则可以执行另一条命令。例如,在您的循环中:
for i in []:
print(i)
else:
print('here')
输出
here
在这种情况下,在您的for循环中找不到我。但是,您没有在for循环之后执行break语句。因此,由于for循环未中断,因此编译器随后转到else
语句在此处执行行。
在第二个示例中,您有:
for i in 1,2,3:
print(i)
else:
print('here')
输出
1
2
3
here
for循环没有遇到break语句,因此在for循环完成后,它将执行else子句。但是您使用的是:
for i in 1,2,3:
print(i)
break
else:
print('here')
输出:
1
答案 1 :(得分:3)
else
break
开始执行 for
。
在某些情况下这可能很有用,并且可以使我们免于制作标志的工作,从而为我们提供帮助。
示例:
如果我们想在不中断for循环的情况下执行一些代码,那么通常我们必须这样做
flag = 0
for i in [1,2,3]:
if condition:
flag = 1
break
if flag == 0:
do stuff
我们可以代替
for i in [1,2,3]:
if condition:
break
else:
do stuff