首页 > 解决方案 > 将元组作为参数传递时,函数中的位置参数似乎“重叠”

问题描述

我最近遇到了以下代码:

info = ([
                ["id", "name", "price", "quantity"],
                [24351, "pen", 2.41, 500],
                [None, "pencil", 0.99, 25],
                [63401, "grizzly bear", None, 1],
                [3532, "rubber duck", 5.45, 24],
                [1523, None, 3.00, 6.8],
                [11765, "caviar", 67.95, None]
        ], True, False)

这个“信息”被传递给一个函数:

do_something(info)

函数定义如下:

do_something(data, header = False, index = False):
    do something with data

当我执行代码时,出现错误:TypeError: 'bool' object is not iterable。这是因为在代码的某处我试图像这样循环二维数组:

for row in data:
    for element in row:
        do something

但是我发现,“数据”包含整个元组,而不仅仅是二维数组在达到“真”时导致此错误。我能够解决调用函数的问题,如下所示:

do_something(*info)

这样元组就可以正确解包。但是我正在寻找一个不同的解决方案,因为我可能无法决定如何调用该函数,所以它应该保持这样:

do_something(info)

我目前也在试图了解为什么数据似乎“重叠”。这意味着位置参数 1 和 2(标题和索引)将正确处理传递给函数的元组的位置 1 和 2。Header 为 True,Index 为 False(除了这是默认值)。然而,第 0 个位置参数“数据”不仅包含元组的第 0 个元素,即二维数组,还包含信息元组内的所有数据。

我在这里查看了一些关于堆栈溢出的主题,并找到了使用 * 的解决方案以及一些解释元组在函数调用中的工作方式以及一般的位置参数,但我无法理解为什么整个信息元组会结束在第 0 个位置参数“data”中向上,而“header”和“index”将按预期工作,只是拉出与其位置相对应的元组部分。

标签: pythonpython-3.xfunctiontuples

解决方案


推荐阅读