我会称这种高级元组操作?

时间:2017-04-06 14:44:02

标签: python function tuples

我正在尝试获取包含单个函数及其参数名称的元组列表并实例化它们。这将用于多线程应用程序。

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循环或什么?干啥?

2 个答案:

答案 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