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

2019-10-01 16:28:51 +08:00
 marsala

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

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

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

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

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

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

大体可以理解成 `range(8)` 和 `list(range(8))` 的区别。
conn4575
2019-10-01 18:18:19 +08:00
这不是 python 里最有名的特性生成器表达式吗?我严重怀疑你是怎么学 python 的。。
liukrystal
2019-10-01 20:14:19 +08:00
前面那个是生成器,不是列表推导式。。。
zuoakang
2019-10-02 21:52:47 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/605887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX