Python 中 [*generator] 语法里的 * 符号是什么含义?
Python 中
[*g] 语法里*符号的作用 你所指的*是Python的可迭代对象解包操作符,该语法是Python 3.5版本通过PEP 448引入的扩展解包特性,核心作用是将后续跟随的可迭代对象的所有元素按顺序展开到当前的容器字面量中。
针对你的场景,[*g]的执行逻辑和list(g)完全等价:
- 两者都会完整迭代生成器
g,将每一步产出的元素依次存入新生成的列表中 - 执行完成后生成器
g都会被耗尽,再次迭代不会返回任何元素
和list()构造方法相比,解包语法的优势是可以灵活地在容器中拼接多个可迭代对象和单独元素,不需要额外做列表拼接操作:
g = (i for i in range(3)) other_list = [10, 20] new_list = [*other_list, "test", *g, 99] # 等价于 other_list + ["test"] + list(g) + [99] # 输出结果为 [10, 20, 'test', 0, 1, 2, 99]
除了列表字面量外,该解包语法也可以应用在元组、集合、字典的字面量中:
- 元组:
(*g,) - 集合:
{*g} - 字典:
{**dict1, **dict2}(**是针对字典的键值对解包操作符)
内容的提问来源于stack exchange,提问作者ncuwlsd
相关产品推荐
相关产品推荐

