使用动态数量的参数调整方法

时间:2012-12-17 21:07:03

标签: python dynamic graph sage

我正在使用sage使用python编写的脚本打印不同的图形。我正在尝试编写一个允许我打印所有图形的通用代码。例如,我有:

g1 = graphs.BarbellGraph(9, 4) 
g2 = graphs.RandomNewmanWattsStrogatz(12, 2, .3)

图表取决于我的参数的数量和类型,我必须调整我的代码,以使其适用于不同的情况。

我的代码:

registry = {"graphs": graphs, "digraphs":digraphs}
methodtocall = getattr(registry["graphs"], "BarbellGraph")
result = methodtocall(2,3)
print(result)

使用此代码我得到结果

graphs.BarbellGraph(2, 3) 

我的问题是methodtocall接受上面代码中的2个参数,我想根据所选图形的参数数量来改变它。 如何更改代码以使其为参数动态化?

如果我有N个参数我想要

result = methodtocall(param1, ... ,paramN)

提前致谢

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找star-operator(又名“splat”或“解包”运算符):

result = methodtocall(*[param1, ... ,paramN])

答案 1 :(得分:0)

如果将参数放在列表中,则可以按如下方式调用函数;

graphs.RandomNewmanWattsStrogatz(*parameter_list)

将把列表扩展为位置参数。

如果你正在编写一个需要取位置参数的函数,你可以用类似的方式接受任意数量的参数;

def my_function(*args):
    assert(type(args) == tuple)