使用默认参数传递多个元组

时间:2017-09-14 19:34:04

标签: python python-3.x arguments parameter-passing

我意识到这可能是一个有点奇怪的请求,但是我希望有一个方法在Python 3中接​​受任意数量的元组,每个元组都有默认参数。

我之所以这样做是因为我正在为我们的小组编写脚本功能,并希望用户易于理解的可调用方法。例如,如果用户想要调用2D绘图方法,我希望方法参数看起来像这样:

plot2D(('sweepvar1', start1, stop1, npts1=None, step1=None),
       ('sweepvar2', start2, stop2, npts2=None, step2=None))

因此用户调用类似这样的内容

plot2D(('var1', 0.0, 1.0, npts1=101), ('var2', 0.5, 0.6, step2=0.001))

基本上难以实现,因为如果用户想要为测量指定多个点或步长,我不知道先验,但我们需要包括两个选项。理想情况下,我希望避免强制用户同时指定这两者,或者创建一个新变量,该变量是在nptsstep之间进行选择的标志。

我对default parameters*args**kwargs有些熟悉,但我似乎无法为上述问题找到一个干净的解决方案。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这似乎很难实现,但是你可以创建一个辅助函数来包装参数并创建一个位置和元组的元组。每个元组的关键字args。调用mkarg(make argument)

def mka(*args,**kwargs):
    return (args,kwargs)

def plot2D(t1,t2):
    print(t1,t2)

plot2D(mka('var1', 0.0, 1.0, npts1=101), mka('var2', 0.5, 0.6, step2=0.001))

此测试返回:

(('var1', 0.0, 1.0), {'npts1': 101}) (('var2', 0.5, 0.6), {'step2': 0.001})

现在繁琐的工作是在plot2D中处理这些参数,但至少用户有一个清晰的界面。

<强>替代:

如果您真的想要元组,您可以检查元组参数的len,如果时间不够,则使用None完成。如果第二个“可选”值比第一个使用的少,那就很好。适用于少量“可选”值。

def plot2D(tuple1,tuple2):
    tuple1 += (None,)*(5-len(tuple1))
    tuple2 += (None,)*(5-len(tuple2))

plot2D(('var1', 0.0, 1.0, 101), ('var2', 0.5, 0.6, None, 0.001))