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

2024-09-25 00:22:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我之所以要这样做,是因为我正在为我们的团队编写脚本功能,并希望用户可以调用的方法易于理解。例如,如果用户要调用二维打印方法,我希望方法参数如下所示:

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

所以用户会这样叫

^{pr2}$

从本质上说,困难就要来了,因为我不知道apriori用户是否想为测量指定一个点或一个步长,但是我们需要包括这两个选项。理想情况下,我希望避免强制用户同时指定这两个参数,或者创建一个新变量,作为在npts和{}之间进行选择的标志。在

我对default parameters*args、和{}有点熟悉,但我似乎不能为上述问题找到一个干净的解决方案。在

提前感谢您的帮助!在


Tags: 方法用户功能脚本none参数数量团队
1条回答
网友
1楼 · 发布于 2024-09-25 00:22:18

这似乎很难按原样实现,但是您可以创建一个helper函数来包装参数,并为每个元组创建一个位置关键字参数元组。调用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))

此测试返回:

^{pr2}$

现在繁琐的工作是在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))

相关问题 更多 >