我看到一段python代码
/*Constructor*/
self.matrix={}
/*my funciton*/
if(self.matrix.get((packet.src,packet.dst))==None):
python数组是否被初始化为None?没有代表什么?上述比较是否正确?我是 python 的新手,正在尝试与 C++ 概念相关联
我看到一段python代码
/*Constructor*/
self.matrix={}
/*my funciton*/
if(self.matrix.get((packet.src,packet.dst))==None):
python数组是否被初始化为None?没有代表什么?上述比较是否正确?我是 python 的新手,正在尝试与 C++ 概念相关联
self.matrix
不是一个数组,它是一个dict
. 这与std::map
C++ 中的 a 相当。从您的使用情况来看,它就像一个std::map<std::pair<srcType, dstType>, valueType>
. (请注意,dict
s 可以在键和值中保存变体类型——我只是假设它总是使用tuple
2 个元素中的一个作为键。)
不,self.matrix
没有初始化为None
. 如果找不到匹配项则dict.get()
返回。 None
作为替代方案,如果找不到匹配项,则会[]
引发异常。KeyError
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'
Python中的空列表或字典(Python程序通常不使用数组,尽管它们有一个模块)分别是“空列表对象”和“空字典对象”,而不是None。get() 函数返回 None 以表示“字典不包含该键的值”。None 是不等于任何标量值(如整数、字符串等)或任何类的任何实例的常量值。这就是它所说的——这不是一回事。C/C++ 对 int 和 float 等标量类型没有这样的概念,但 NULL 指针保证不等于任何指向对象的有效指针。
在 OOP 模型中,None 是每个类的子类,但 Python 并不真正关心那么多,因为它的类型更松散。