V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2019-10-01 16:28:51 +08:00 · 4102 次点击
    这是一个创建于 1898 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    大体可以理解成 `range(8)` 和 `list(range(8))` 的区别。
    conn4575
        5
    conn4575  
       2019-10-01 18:18:19 +08:00 via Android
    这不是 python 里最有名的特性生成器表达式吗?我严重怀疑你是怎么学 python 的。。
    liukrystal
        6
    liukrystal  
       2019-10-01 20:14:19 +08:00
    前面那个是生成器,不是列表推导式。。。
    zuoakang
        7
    zuoakang  
       2019-10-02 21:52:47 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5512 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.