将任意数量的一组变量传递给Python函数

问题描述:

我不确定使用代码来演示问题的方式更简单。我想有一个函数接受可变数量的一组3个必需和1个可选参数。举例来说,matplotlib.pyplot.plot()可以接受任意数量的(x, y, color)变量。我想复制此行为,但我不确定使用* args或类似方法来执行此操作的正确方法。下面我说明我想要的行为。将任意数量的一组变量传递给Python函数

myFunc(name, lo, hi, step) # Do something 
myFunc(name, lo, hi, step, name2, low2, hi2, step2) # Do something for name and name2 
myFunc(name, lo, hi, name2, low2, hi2) # Same as above but use default step for both 

我能想到的唯一的办法就是通过参数循环,并进行一系列的检查,在确认其是否符合该类型(name, lo, hi, step)并检查step甚至给出,但我想知道如果有更有效的方法做到这一点。

编辑:

我想上面的行为,因为我的函数使用第一套鉴别参数,并创建一个while循环。如果还有其他参数集,它会递归地调用它自己来构造一个嵌套的while循环和其余参数等等。如果没有剩余的集合,它将执行一些数据测量,然后返回。通过这种方式,我可以使用单个递归函数遍历任意大的多维空间。

+0

也许你想要** kwargs。这些将允许你使用可选的关键字参数 –

+0

我发现'matplotlib' api的一部分非常糟糕 - 这是其中之一。 :-)。在这种情况下,我建议让函数/方法调用多次,需要3个必需参数和1个可选参数。 。 。这对你的用例是否可能? – mgilson

+0

检查这个职位:http://*.com/questions/3394835/args-and-kwargs – Jaco

是这样的,你在找什么?

list_of_things = [('name', 'lo', 'hi', 'step'), 
        ('name2', 'lo2', 'hi2'), 
        ('name3', 'lo3', 'hi3', 'step3') 
] 
def myFunc(name, lo, hi, step='default'): 
           # do something 
def callMyFunc(x):  
    for i in x: 
     myFunc(*i)   # pass the contents of the tuple as arguments 

如果你不想要订购物品的元组,你必须命名每个参数并提交它们命名。

+0

排序,但我需要函数内的for循环,可以这么说。基本上我检查了我有多少个元组,并且函数根据传递的数量而变化。更具体地说,它处理第一个集合,如果还有更多的元组,我递归地调用该函数。 – Snyder005

+0

我编辑它将for循环放置在第二个函数中。使用列表调用该函数将逐个处理每个元组。根据您更新的问题,这可能无济于事。 – jlbnjmn