zoukankan      html  css  js  c++  java
  • for--else大坑问题

    这是一次偶然发现的问题,做一下记录

    a = [{'w0', 'b0', 'v0'}, {'w1', 'b1', 'v1'}, {'w2', 'b2', 'v2'}]
    
    for i in a:
        for j in i:
            print(j, '我是内循环')
        else:
            print(j, '我是else')

    上面这个代码大家都知道他会内循环完执行else,下面是运行结果

    b0 我是内循环
    w0 我是内循环
    v0 我是内循环
    v0 我是else
    v1 我是内循环
    b1 我是内循环
    w1 我是内循环
    w1 我是else
    w2 我是内循环
    b2 我是内循环
    v2 我是内循环
    v2 我是else
    
    进程已结束,退出代码 0

    但是当我们在else里加判断结束语句

    for i in a:
        for j in i:
            print(j, '我是内循环')
        else:
            print(j, '我是else')
            if True:
                break

    执行结果如下:

    w0 我是内循环
    b0 我是内循环
    v0 我是内循环
    v0 我是else
    
    进程已结束,退出代码 0

    也就是说for--else的else语句里面break结束的是外层循环

    那么如果我们在else里进行for--else嵌套,else所break的是哪一个呢?

    a = [{'w0', 'b0', 'v0'}, {'w1', 'b1', 'v1'}, {'w2', 'b2', 'v2'}]
    
    
    for i in a:
    print(i, '我是最外层循环,top')
    for j in i:
    print(j, '我是内循环')
    else:
    for k in a:
    print(k, '我是else内内循环')
    else:
    for v in k:
    print(v, '我是else内内内循环')
    else:
    if True:
    break

    输出结果:

    {'v0', 'b0', 'w0'} 我是最外层循环,top
    v0 我是内循环
    b0 我是内循环
    w0 我是内循环
    {'v0', 'b0', 'w0'} 我是else内内循环
    {'v1', 'w1', 'b1'} 我是else内内循环
    {'w2', 'v2', 'b2'} 我是else内内循环
    w2 我是else内内内循环
    v2 我是else内内内循环
    b2 我是else内内内循环
    
    进程已结束,退出代码 0

    总结就是for循环里不管内嵌循环多少层,for--else里面的else语句如果break那么都是结束最外层的那个for循环

  • 相关阅读:
    angular.isDefined()
    angular.isDate()
    angular.isArray()
    .NET中栈和堆的比较
    SQL Server 2012配置Always On可用性组
    一分钟了解负载均衡的一切
    C# 线程并发锁
    获取Http请求参数
    什么是WCF
    Bitmap算法应用
  • 原文地址:https://www.cnblogs.com/1314h/p/13947615.html
Copyright © 2011-2022 走看看