【问题标题】:What does this assignment statement mean?这个赋值语句是什么意思?
【发布时间】:2016-05-23 20:47:56
【问题描述】:

我遇到了这个 Python 脚本:

fea_det = cv2.xfeatures2d.SIFT_create()
des_ext = cv2.xfeatures2d.SIFT_create()

des_list = []

for image_path in image_paths:
    im = cv2.imread(image_path)
    kpts = fea_det.detect(im)
    kpts, des = des_ext.compute(im, kpts)
    des_list.append((image_path, des))

我的问题与不同变量和参数的含义无关,而是与我们如何阅读特别是以下语句有关:

kpts, des = des_ext.compute(im, kpts)

kptsdes 会发生什么?它们的数据类型是什么?

【问题讨论】:

标签: python variables


【解决方案1】:

Comma separated identifiers on LHS of assignment statement performs iterable unpacking on result of RHS。引用文档:

如果目标列表是逗号分隔的目标列表:对象 必须是具有与目标相同数量的项目的可迭代对象 在目标列表中,项目从左到右分配给 对应的目标。

它们的数据类型是什么?

我不知道,我不在乎。 执行赋值时与 Python 相同。如果您稍后要求这些对象执行某些操作,它可能会在意。

【讨论】:

    【解决方案2】:

    Python 有一种称为unpacking 的机制。这在其他语言中称为解构赋值

    它是这样的:当一个表达式计算为一个可迭代对象(例如listtuple)时,您可以在赋值时将内部值分散到单独的变量中:

    def get_2_tuple():
        return ('foo', 'bar')
    
    values = get_2_tuple() # no unpacking
    foo, bar = values # unpacking!
    
    foo, bar = get_2_tuple() # same-line unpacking
    

    解包操作可能是raiseException:函数get_2_tuple() 必须返回一个带有恰好两个值的迭代器才能工作。

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 2012-01-05
      • 2021-12-25
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 2022-01-12
      • 2014-10-31
      相关资源
      最近更新 更多