【发布时间】:2020-12-08 12:47:06
【问题描述】:
我想调用一个函数,该函数接受元组作为其参数的一部分,即函数调用如下:
foo('Hello', (x1, x2), (y1, y2), (z1, z2))
我有一个元组列表如下:
arr = [(1, 1), (2, 2), (3, 3)]
使用foo("Hello", *arr) 调用函数(正如许多在线答案所建议的那样)不起作用。它给出了错误:TypeError: foo() missing 2 required positional arguments: 'y' and 'z'
函数定义不能修改,即不能改成foo("Hello", *arg)。
编辑:我正在使用的具体函数是 cv2.rectangle,它在图像上绘制一个矩形。参数列表中有 3 个元组:(x1, y1), (x2, y2) 和一个 RGB 值的元组,例如(255, 0, 0)。因为我需要使用不同的值多次调用这个 cv2.rectangle 函数,所以我将这些值存储在这样的字典中:
params = {
key1: [(10, 10), (60, 30), (255, 0, 0)],
key2: [(15, 15), (65, 35), (255, 100, 255)],
key3: [(20, 20), (70, 40), (255, 0, 0)],
key4: [(25, 25), (75, 45), (255, 100, 0)],
key5: [(30, 30), (80, 50), (0, 100, 0)],
key6: [(35, 35), (85, 55), (255, 0, 0)],
key7: [(40, 40), (90, 60), (0, 100, 0)],
key8: [(45, 45), (95, 65), (0, 100, 255)],
key9: [(50, 50), (100, 70), (255, 0, 0)],
key10: [(55, 55), (105, 75), (255, 100, 0)]
}
调用cv2.rectangle函数当然可以传入params[key1][0],params[key1][1],params[key1][2],但是我想知道有没有通常是一个更优雅的解决方案,我可以做这样的事情
cv2.rectangle(..., *params[key1], ...)
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
这似乎是XY problem。为什么你认为你需要这样做?
-
@AryaMcCarthy 嗨,因为函数来自一个包。
-
如果我们看到函数签名,那可能会有所帮助。总是三元组吗?
-
@AryaMcCarthy 我正在使用的具体函数是 cv2.rectangle。是的,参数列表中有 3 个元组。当然我可以只传入arr[0]、arr[1]、arr[2],但是我想知道对于具有更多元组的函数是否有更优雅的解决方案。
-
你的意图不清楚。您能否编辑您的问题以显示您关心的具体情况?
标签: python-3.x list function