在Python中使用OpenCV时,我遇到了这些代码行
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)
我很好奇这里发生了什么,好像没有键填充Python字典。我已经四处搜索,但至今尚未找到任何有关其工作原理的参考资料。以下是上下文代码源的链接:
http://docs.opencv.org/trunk/da/de9/tutorial_py_epipolar_geometry.html
特别是我要问的是"这里究竟发生了什么?"
答案 0 :(得分:0)
在第
行index_params = dict(algorithm = 0, trees = 5)
algorithm
和trees
是关键。
生成的字典如下所示:
{'algorithm': 0, 'trees': 5}
答案 1 :(得分:0)
实际上在documentation:
中提到了这一点如果给出了关键字参数,则将关键字参数及其值添加到从位置参数创建的字典中。如果已添加的键已存在,则keyword参数中的值将替换位置参数中的值。
[...]
为了说明,以下示例都返回等于
{"one": 1, "two": 2, "three": 3}
的字典:a = dict(one=1, two=2, three=3) b = {'one': 1, 'two': 2, 'three': 3} c = dict(zip(['one', 'two', 'three'], [1, 2, 3])) d = dict([('two', 2), ('one', 1), ('three', 3)]) e = dict({'three': 3, 'one': 1, 'two': 2})
所以你的例子相当于:
index_params = {'algorithm': FLANN_INDEX_KDTREE, 'trees': 5}
search_params = {'checks': 50}
答案 2 :(得分:0)
这是用于建立键值对的替代语法。例如,在index_params中算法是一个键,FLANN_INDEX_KDTREE是一个值。
答案 3 :(得分:0)
鉴于您为其提供了一个明确的键值对列表,它会构造一个包含这些键值的字典。因此dict(checks=50)
会导致:
{'checks':50}
和dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
相当于:
{'algorithm' : FLANN_INDEX_KDTREE, 'trees' : 5)
实际上,如果您为函数提供明确命名的参数列表,则可以获取它们:
def func (**kwargs):
#...
pass
如果您现在使用func
致电func(foo=4,bar='a')
,那么kwargs
将如下所示:
{'foo':4,'bar:'a'}
答案 4 :(得分:0)
在python中有三种等效的构造字典的方法:
直接(最着名的方式)
data = {'a': 1, 'b': 2}
来自序列
data = dict([('a', 1), ('b', 2)])
或来自命名参数(仅当键是字符串时)
data = dict(a=1, b=2)
您的示例只使用最后一种方法