如何将[]与自定义__builtin__列表一起使用?
我想了解__builtin__
如何在Python中工作。我的代码如下:如何将[]与自定义__builtin__列表一起使用?
import __builtin__ class MyList(list):
pass
__builtin__.list = MyList
a = [1,2,3,4,5]
b = list([1,2,3,4,5])
print 'A: ', type(a)
print 'B: ', type(b)
当我打印类型两个列表的,我得到:
A: <type 'list'> B: <class '__main__.MyList'>
为什么不MyList
型的两份名单,我怎么能做到这一点[]
语法也将是MyList
?
回答:
如果检查有[]
由CPython的interprerter与dis
模块处理,你会看到它产生BUILD_LIST
指令:
>>> def x(): ... x = [1,2]
...
>>> dis.dis(x)
2 0 LOAD_CONST 1 (1)
3 LOAD_CONST 2 (2)
6 BUILD_LIST 2
9 STORE_FAST 0 (x)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
相应的指令触发直接调用C函数PyList_New
(它ceval被处理.C):
2202 case BUILD_LIST: 2203 x = PyList_New(oparg);
我认为,如果CPython中会搜索list
构造在每次__builtin__
伪模块[]
在源代码中使用,它会慢得多,所以这种行为可以被认为是一种优化。
所以你问的是在香草CPython中无法实现的。
以上是 如何将[]与自定义__builtin__列表一起使用? 的全部内容, 来源链接: utcz.com/qa/261785.html