python - 将元组作为参数传递时,函数中的位置参数似乎“重叠”
问题描述
我最近遇到了以下代码:
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”将按预期工作,只是拉出与其位置相对应的元组部分。
解决方案
推荐阅读
- pandas - 如何创建 agg func 来处理 Pandas 中的除以 0?
- c# - ASP.NET MVC + ORACLE + Entity Framework 错误:无法生成显式迁移
- javascript - 在刀片中定义 vuejs 组件
- javascript - 将 JS 函数(外部 JS)携带到另一个 PHP 文件中“包含”的 PHP 文件
- powershell - 如何将命令行参数传递给腻子而不使它们在powershell / cmd中可见?
- android - 使用 SQlite 的 DB 浏览器查看 sqlite 数据库文件
- kubernetes - Kubernetes 崩溃循环错误,容器无法运行并且看不到日志
- java - Spring中使用注解的依赖注入
- python - 使用 Keras (Tensorflow) 训练模型时出现形状错误
- java - 如何使用 Maven 构建从属性文件中删除注释?