我正在尝试获取包含单个函数及其参数名称的元组列表并实例化它们。这将用于多线程应用程序。
import pandas as pd
df = pd.DataFrame()
def func1(df,arg2,arg3):
print 'func1'
print type(df)
print arg2,arg4
def func2(arg1,df,arg3,arg4):
print 'func2'
print arg1
print type(df)
print arg3,arg4
list_of_func_tups = [(func1,df,'two','three'),(func2,'one',df,'three','four')]
for tup in list_of_func_tups:
f = tup[0]
args = tup[1:]
results = f(args)
但问题是args
仍被视为元组,因此,错误表明只给出了一个参数。
TypeError: func1() takes exactly 3 arguments (1 given)
有没有办法让我能够以某种方式将args视为各自的个人论点?也许是一种for循环或什么?干啥?
答案 0 :(得分:3)
让我们定义一个函数:
def f(arg1, arg2, arg3):
return arg1 + arg2 + arg3
正如Willem所提到的,你可以使用星号拼写一个元组或列表。
f(*(1, 2, 3))
您可以将双星号用于词典
f(**{'arg1': 1, 'arg2': 2, 'arg3': 3})
答案 1 :(得分:1)
您正在寻找的是一种将元组作为位置参数 提供的方法。您可以使用前导星号(*
)来执行此操作:
result = f(*args)
documentation of function calls:
中记录了这一点如果函数调用中出现语法
*expression
,expression
必须评估为可迭代。来自此可迭代的元素被视为附加位置 参数强>;如果有位置参数 x1,...,xN ,和 expression的计算结果为 y1,...,yM ,这相当于 使用 M + N 位置参数进行调用 x1,...,xN,y1,...,yM 。