gpt4 book ai didi

Python - 函数/参数元组列表

转载 作者:太空狗 更新时间:2023-10-29 22:13:49 25 4
gpt4 key购买 nike

def f1(n): #accepts one argument
pass

def f2(): #accepts no arguments
pass

FUNCTION_LIST = [(f1,(2)), #each list entry is a tuple containing a function object and a tuple of arguments
(f1,(6)),
(f2,())]

for f, arg in FUNCTION_LIST:
f(arg)

在循环的第三轮,它试图将一个空参数元组传递给一个不接受任何参数的函数。它给出错误 TypeError: f2() takes no arguments (1 given)。前两个函数调用工作正常 - 传递的是元组的内容,而不是元组本身。

摆脱有问题的列表条目中的空参数元组并不能解决问题:

FUNCTION_LIST[2] = (f2,)
for f,arg in FUNCTION_LIST:
f(arg)

导致 ValueError:需要超过 1 个值才能解包

我还尝试遍历索引而不是列表元素。

for n in range(len(FUNCTION_LIST)):
FUNCTION_LIST[n][0](FUNCTION_LIST[n][1])

这在第一种情况下给出了相同的 TypeError,而在列表的第三个条目是 (f2,) 时给出了 IndexError: tuple index out of range

最后,星号符号也不起作用。这次它在调用 f1 时出错:

for f,args in FUNCTION_LIST:
f(*args)

给出 TypeError: f1() argument after * must be a sequence, not int

我已经没有什么可以尝试的了。我仍然认为第一个应该有效。谁能指出我正确的方向?

最佳答案

您在此代码段中的评论显示了与此上下文相关的误解:

FUNCTION_LIST = [(f1,(2)), #each list entry is a tuple containing a function object and a tuple of arguments
(f1,(6)),
(f2,())]

表达式 (2)(6) 不是元组——它们是整数。您应该使用 (2,)(6,) 来表示您想要的单元素元组。修复此问题后,您的循环代码应如下所示:

for f, args in FUNCTION_LIST:
f(*args)

参见 Unpacking Argument Lists在 Python 教程中获取对 *args 语法的解释。

关于Python - 函数/参数元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com