推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
marsala
V2EX  ›  Python

[求助] Python 在列表推导时使用( )和 [] 差别那么大?

  •  
  •   marsala · Oct 1, 2019 · 4868 views
    This topic created in 2600 days ago, the information mentioned may be changed or developed.

    正在尝试获取一些代理 ip,在清洗数据的时候发现了一个百思不得其解的东西。如下图所示:

    在图中箭头标注的地方,用列表[],则终端输出的内容是正常的,符合预期的: 正常

    但如果将图中箭头标注的地方,换成 tuple(),终端输出的内容就不知道是什么东西了: 不正常

    get_ips()返回的是自建的一个类 ResultContainer,可以看成是一个列表,其他部分的代码没啥特殊的。

    请教大神这是什么原因啊!!!求教!

    7 replies  •  2019-10-02 21:52:47 +08:00
    marsala
    marsala
    OP
    Oct 1, 2019
    1
    而且也仅在这里遇到了这样的情况,在其他地方用[(i,i) for i in range(100)]这样推导是没问题的
    Owenjia
    Owenjia
    Oct 1, 2019❤️1
    2
    圆括号那个是生成器,不是推导式,没有元组推导式这种东西。
    ysc3839
    ysc3839
    Oct 1, 2019 via Android
    3
    遇到不知道的东西请善用搜索,一搜索就能知道是 generator。
    cyrbuzz
    cyrbuzz
    PRO
    Oct 1, 2019
    4
    ()的写法写出来是生成器,你用到的时候才会生成数据,不用它就不生成。
    []的写法写出来就是个列表,数据都生成好了。

    大体可以理解成 `range(8)` 和 `list(range(8))` 的区别。
    conn4575
    conn4575
    Oct 1, 2019 via Android
    5
    这不是 python 里最有名的特性生成器表达式吗?我严重怀疑你是怎么学 python 的。。
    liukrystal
    liukrystal
    Oct 1, 2019
    6
    前面那个是生成器,不是列表推导式。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2089 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 06:35 · PVG 14:35 · LAX 22:35 · JFK 01:35
    ♥ Do have faith in what you're doing.