我有以下python代碼:import networkx as nx def cost(i, j, d, value1, value2): # some operation involving all these values return cost# graph is a networkx graph# src, dst are integers# cost is a callable that is passed 3 values automatically i.e. src, dst and d # d is a dictionary of edge weightspath = nx.dijkstra_path(graph, src, dst, weight=cost)現(xiàn)在我想通過(guò)兩個(gè)值value1,并value2給cost功能。該networkx文件表示,weight可以接受恰好3參數(shù)的調(diào)用。但我需要value1和value2進(jìn)行計(jì)算。如何才能做到這一點(diǎn)?編輯 使用 functools 的解決方案效果很好。但是,我的函數(shù)在一個(gè)類(lèi)中,如下所示:import networkx as nx import functoolsclass Myclass: def cost(self, i, j, d, value2): # some operation involving all these values # also need self # graph is a networkx graph # src, dst are integers # cost is a callable that is passed 3 values automatically i.e. src, dst and d # d is a dictionary of edge weights # path = nx.dijkstra_path(graph, src, dst, cost) cost_partial = functools.partial(cost, self=self, value2=5) path = nx.dijkstra_path(graph, src, dst, cost_partial)使用這種方法,nx.dijkstra_path堅(jiān)持分配src給self. 因此解釋器抱怨self分配了多個(gè)值。我需要 self 來(lái)計(jì)算成本。
1 回答

烙印99
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
這在很大程度上取決于value1和的含義value2。我建議添加一個(gè)可由 networkx 調(diào)用的包裝器:
def cost_wrapper(i, j, d):
value1 = 0 # set values as needed
value2 = 1
return cost(i, j, d, value1, value2)
并將其提供給 networkx:
path = nx.dijkstra_path(graph, src, dst, weight=cost_wrapper)
或者簡(jiǎn)單地使它們成為全局變量,而不是參數(shù)。
添加回答
舉報(bào)
0/150
提交
取消