我有两个 Python 函数,它们都在函数定义中采用变量参数。举个简单的例子:
def func1(*args):
for arg in args:
print arg
def func2(*args):
return [2 * arg for arg in args]
我想编写它们——如 func1(func2(3, 4, 5))
-- 但我不想要 args
在func1
成为([6, 7, 8],)
, 我希望它是 (6, 7, 8)
, 就好像它被称为 func1(6, 7, 8)
而不是 func1([6, 7, 8])
.
通常,我会使用 func1(*func2(3, 4, 5))
或者有 func1
检查是否args[0]
是一个列表。不幸的是,我不能在这个特定实例中使用第一个解决方案,要应用第二个解决方案需要在很多地方进行这样的检查(func1
中有很多函数)。
有没有人知道如何做到这一点?我想可以使用某种内省(introspection),但我可能是错的。
最佳答案
您可以考虑编写函数装饰器来检查第一个参数是否为列表。将装饰器应用于现有函数比修改函数要简单一些。
关于Python 列表为 *args?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2581217/