V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jakeyfly
V2EX  ›  问与答

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

  •  
  •   jakeyfly · 2018-03-06 04:08:07 +08:00 · 1464 次点击
    这是一个创建于 2437 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    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 条回复    2018-03-06 11:16:14 +08:00
    jakeyfly
        1
    jakeyfly  
    OP
       2018-03-06 04:16:02 +08:00
    这代码怎么才能编辑好呀
    ligyxy
        2
    ligyxy  
       2018-03-06 04:22:48 +08:00
    你应该考虑为什么 [i[0] for i in []] 不会报错
    对空列表循环 [].__iter__().__next__() 会返回 StopIteration,i[0]就没有被执行
    20015jjw
        3
    20015jjw  
       2018-03-06 04:40:28 +08:00 via Android
    格式什么鬼不想看
    20015jjw
        4
    20015jjw  
       2018-03-06 04:41:00 +08:00 via Android
    有 preview 不用
    就算不会写贴个 gist/pastebin 也行啊
    jakeyfly
        5
    jakeyfly  
    OP
       2018-03-06 11:13:17 +08:00
    @ligyxy 那等 于自动过滤空表列啦~~~
    jakeyfly
        6
    jakeyfly  
    OP
       2018-03-06 11:16:14 +08:00
    @20015jjw 大佬 不好意思啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5719 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:38 · PVG 16:38 · LAX 00:38 · JFK 03:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.