如何将[]与自定义__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

回到顶部