数组在Python中初始化为“None”

时间:2013-05-02 02:14:09

标签: python python-2.7

我看到一段python代码

/*Constructor*/
self.matrix={}

/*my funciton*/
if(self.matrix.get((packet.src,packet.dst))==None):

python数组是否初始化为None?没有代表什么?以上比较是否正确?我是python中的新手,并尝试与C ++概念相关联

3 个答案:

答案 0 :(得分:2)

self.matrix不是数组,而是dict。这与C ++中的std::map相当。根据您的使用情况,它就像std::map<std::pair<srcType, dstType>, valueType>。 (注意dict s可以在键和值中包含变量类型 - 我只是假设它总是使用tuple的2个元素作为键。)

不,self.matrix未初始化为Nonedict.get() 如果无法找到匹配项,则会返回 None。作为替代方案,[]如果无法找到匹配项,则会引发KeyError异常。

答案 1 :(得分:1)

matrix是一个不是列表的字典。最好用一个例子来解释:

>>> dic = {}
>>> dic['a'] = 1
>>> dic['a']
1
>>> dic.get('a')
1
>>> dic.get('b') == None
True
>>> dic['b']
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    dic['b']
KeyError: 'b'

答案 2 :(得分:1)

Python中的空列表或字典(Python程序通常不使用数组,尽管它们有一个模块)分别是“空列表对象”和“空字典对象”,而不是“无”。 get()函数返回None作为说“字典不包含该键的值”的方式。 None是一个常量值,不等于任何标量值(如整数,字符串等)或任何类的任何实例。这就是它所说的 - 这不是一件事。 C / C ++对于诸如整数和浮点数之类的标量类型没有这样的概念,但是保证NULL指针不等于任何指向对象的有效指针。

在OOP模型中,None是每个类的子类,但是Python并不是那么关心,因为它的类型更松散。