【问题标题】:Python asterisk before function [duplicate]函数前的Python星号[重复]
【发布时间】:2017-01-15 20:54:24
【问题描述】:

我正在学习本教程:

http://www.pyimagesearch.com/2015/04/20/sorting-contours-using-python-and-opencv/#comment-405768

其中一行是函数:

(cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),
        key=lambda b:b[1][i], reverse=reverse))

我想知道sorted函数调用前的星号有什么用。

【问题讨论】:

  • 这个问题很有帮助,因为 Vic Yu 提供的解释非常简短有效。我们有时还需要针对特定​​情况的快速答案。这里发布了类似的问题,但它们更笼统,并且得到了非常好的和深入的答案,但在某些时间紧迫的情况下,可能需要快速简短的解释。

标签: python python-2.7 python-3.x opencv


【解决方案1】:

Asterisk 正在解包操作符:

>>> list(range(3, 6))            # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> list(range(*args))            # call with arguments unpacked from a list
[3, 4, 5]

更多关于解包操作符:

https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists

【讨论】:

    【解决方案2】:

    如果语法 *expression 出现在函数调用中,则表达式必须计算为可迭代。来自这个可迭代的元素被视为附加的位置参数;如果有位置参数 x1, ..., xN,并且表达式的计算结果为序列 y1, ..., yM,则这等效于使用 M+N 位置参数 x1, ..., xN, y1, 的调用。 ..,嗯。

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多