我看到一段python代码
/*Constructor*/
self.matrix={}
/*my funciton*/
if(self.matrix.get((packet.src,packet.dst))==None):
python数组是否初始化为None?没有代表什么?以上比较是否正确?我是python中的新手,并尝试与C ++概念相关联
答案 0 :(得分:2)
self.matrix
不是数组,而是dict
。这与C ++中的std::map
相当。根据您的使用情况,它就像std::map<std::pair<srcType, dstType>, valueType>
。 (注意dict
s可以在键和值中包含变量类型 - 我只是假设它总是使用tuple
的2个元素作为键。)
不,self.matrix
未初始化为None
。 dict.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并不是那么关心,因为它的类型更松散。