gpt4 book ai didi

python - 如何在没有类名的情况下创建列表?

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:49 25 4
gpt4 key购买 nike

可以像这样创建列表:

l = list()

l.append(1)

然而,最常见的方法是创建这样的列表:

l = [1]

我的问题在概念上很简单,但在答案上可能非常复杂,但是列表是如何用通常类符号之外的符号创建的?

我已经在 https://github.com/python/cpython/blob/master/Objects/listobject.c 查看了源代码并且无法找到它定义列表符号 [] 的位置。

我不是在问 [] 和 list() 之间的区别 - 我是在问为什么你可以使用 []。这个对象的创建方式怎么可能不同于其他对象?

最佳答案

列表文字[...] 由语法定义,与ifwhile 等关键字相同:

atom: ... | '[' [testlist_comp] '] | ...

当代码生成器在 AST 中遇到列表字面量时,它会生成一个特定的字节码来创建一个列表:

>>> import dis
>>> dis.dis('[]')
1 0 BUILD_LIST 0
2 RETURN_VALUE

而对 list 的调用与任何其他可调用对象一样处理:

>>> dis.dis('list()')
1 0 LOAD_NAME 0 (list)
2 CALL_FUNCTION 0
4 RETURN_VALUE

对于非空列表,将字面量中的表达式加入栈中,供BUILD_LIST使用:

>>> dis.dis('list([1,2])')
1 0 LOAD_NAME 0 (list)
2 LOAD_CONST 0 (1)
4 LOAD_CONST 1 (2)
6 BUILD_LIST 2
8 CALL_FUNCTION 1
10 RETURN_VALUE

list([1,2]) 这样的调用必须先使用 BUILD_LIST 来创建一个列表,然后再将 that 传递给 列表作为参数。

关于python - 如何在没有类名的情况下创建列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com