将任意数量的一组变量传递给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循环和其余参数等等。如果没有剩余的集合,它将执行一些数据测量,然后返回。通过这种方式,我可以使用单个递归函数遍历任意大的多维空间。
答
是这样的,你在找什么?
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
如果你不想要订购物品的元组,你必须命名每个参数并提交它们命名。
也许你想要** kwargs。这些将允许你使用可选的关键字参数 –
我发现'matplotlib' api的一部分非常糟糕 - 这是其中之一。 :-)。在这种情况下,我建议让函数/方法调用多次,需要3个必需参数和1个可选参数。 。 。这对你的用例是否可能? – mgilson
检查这个职位:http://*.com/questions/3394835/args-and-kwargs – Jaco