【发布时间】:2018-02-23 21:37:38
【问题描述】:
我意识到这可能是一个有点奇怪的请求,但我希望有一个方法在 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))
基本上困难来了,因为我不知道用户是否想为测量指定点数或步长,但我们需要同时包含这两个选项。理想情况下,我想避免强迫用户同时指定两者,或者创建一个新变量作为在npts 和step 之间进行选择的标志。
我对@987654325@、*args 和**kwargs 有点熟悉,但我似乎无法对上述问题提出一个干净的解决方案。
提前感谢您的帮助!
【问题讨论】:
-
这些不是元组,因为它们包含命名参数...
-
看起来更像命名元组。
-
也许您应该使用自定义对象而不是元组,以便用户可以正确初始化所有内容。
-
我知道这听起来很琐碎,也许没有更好的方法可以做到,但我希望找到一个不涉及
plot2D(CustomObject('var1', 0.0, 1.0, npts=101), CustomObject('var2', 0.0, 1.0, step=0.01))之类的解决方案 -
@spaderdabomb 我提供了 2 个替代方案。当然,它们都不完全符合您的需求。
标签: python python-3.x arguments parameter-passing