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循环

  • 相关阅读:
    自己用的vim插件
    关于利用python进行验证码识别的一些想法
    看看黑客如何破解验证码机制
    不懂技术的人不要对懂技术的人说这很容易实现
    4个mysql客户端工具的比较
    GB2312,GBK和UTF-8的区别
    Windows下用Python你会几种copy文件的方法?
    python3.4连接mysql数据库的方法
    python3操作mysql教程
    python win32com
  • 原文地址:https://www.cnblogs.com/1314h/p/13947615.html
Copyright © 2011-2022 走看看