最近在模仿 bottle 写一个迷你 web 框架,有一个地方是在构造响应头
start_response(status, list(response.header.items()))
其中 response.header.items 是一个生成器,如上述代码中用 list(),生成器就会自动展开,但是用 [] 就只是返回一个包含生成器的列表。
所以请假一下大家,这两者是有什么区别吗
最近在模仿 bottle 写一个迷你 web 框架,有一个地方是在构造响应头
start_response(status, list(response.header.items()))
其中 response.header.items 是一个生成器,如上述代码中用 list(),生成器就会自动展开,但是用 [] 就只是返回一个包含生成器的列表。
所以请假一下大家,这两者是有什么区别吗
|
ahdwMar 22, 2020
1
据我的经验,list() 函数是把括号里的东西转换成 list 格式,也可以用来创建 list []
|
|
Trim21Mar 22, 2020 via iPhone
2
括号就是正常的 list 语法,相当于写了一个[generator,]
你要是想展开可以用[x for x in generator] |
|
ahdwMar 22, 2020
3
[ ] 是创建一个 list,内容是方括号里面的。
( cmd + enter 竟然直接把我写了一半的东西发表了……) |
|
nnqijiuMar 22, 2020
4
list()可以把别的对象转成 list 对象
|
|
5
写框架前先把基本语法看一遍吧...
|
|
imn1Mar 22, 2020
6
list(obj) --> list_object[:] ≈= obj[:]
[obj] --> list_object[0] == obj list("abc") --> ['a', 'b', 'c'] ["abc"] --> ['abc', ] |
|
inhzusMar 22, 2020 via Android
7
没记错的话 [] 作为函数参数的缺省值会发生出乎意料的事情
|
|
hxseMar 22, 2020
8
>>> a=(i for i in range(5))
>>> b=(i for i in range(5)) >>> list(a)==[*b] True |
|
lithbitrenMar 23, 2020
9
方括号里面没加星号吧,加星号没见过出啥问题,除非直接上列表解析式才不用加星号,list(iterator)和[*iterator]没遇到过啥不等价问题,后者还快些,但 dict(kwargs)和{**kwargs}就不太一样,前者可以解析子元素长度为 2 的可迭代对象,后者不行。
|
|
lithbitrenMar 23, 2020
10
start_response(status, list(response.header.items())) 写成 start_response(status, [*response.header.items()])估计就没啥问题了。
|
|
13
@lithbitren
我明白了,感谢🙏 |
|
bnm965321Mar 24, 2020
14
[] 这是 literal 构造器,字面量构造器
|