jakeyfly
V2EX  ›  问与答

Python yield 生成器 会自动过滤空值啊? 蒙蔽了,想了一晚上没想明白,代码在正文。非常之奇怪

  •  
  •   jakeyfly · Mar 6, 2018 · 1841 views
    This topic created in 3001 days ago, the information mentioned may be changed or developed.

    写爬虫无意中发现的(原代码比较复杂,下面这是我模仿其结构写的)

    可为什么不会报错???? 空列表直接过滤掉了,那这样写可以直接过滤空值啦?岂不是非常爽?还是我小白了,这里面有我不知道的原理?

    def die(l): for d in l: count = d[0]+d[1] yield count

    s = [ [['A','B']],[],

    [['C','D']],[]
    

    ]

    for i in s: for j in die(i): print('++',j)

    输出 :++ AB ++ CD

    6 replies    2018-03-06 11:16:14 +08:00
    jakeyfly
        1
    jakeyfly  
    OP
       Mar 6, 2018
    这代码怎么才能编辑好呀
    ligyxy
        2
    ligyxy  
       Mar 6, 2018
    你应该考虑为什么 [i[0] for i in []] 不会报错
    对空列表循环 [].__iter__().__next__() 会返回 StopIteration,i[0]就没有被执行
    20015jjw
        3
    20015jjw  
       Mar 6, 2018 via Android
    格式什么鬼不想看
    20015jjw
        4
    20015jjw  
       Mar 6, 2018 via Android
    有 preview 不用
    就算不会写贴个 gist/pastebin 也行啊
    jakeyfly
        5
    jakeyfly  
    OP
       Mar 6, 2018
    @ligyxy 那等 于自动过滤空表列啦~~~
    jakeyfly
        6
    jakeyfly  
    OP
       Mar 6, 2018
    @20015jjw 大佬 不好意思啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2780 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 466ea39e · 54ms · UTC 10:27 · PVG 18:27 · LAX 03:27 · JFK 06:27
    ♥ Do have faith in what you're doing.