0

我正在使用 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)

提前致谢

4

2 回答 2

0

我认为您正在寻找星号运算符(又名“splat”或“拆包”运算符):

result = methodtocall(*[param1, ... ,paramN])
于 2012-12-17T21:23:11.563 回答
0

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

graphs.RandomNewmanWattsStrogatz(*parameter_list)

这会将列表扩展为位置参数。

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

def my_function(*args):
    assert(type(args) == tuple)
于 2012-12-17T21:26:18.813 回答