У меня есть следующий код 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 weights
path = nx.dijkstra_path(graph, src, dst, weight=cost)
Теперь я хочу передать два значения value1
и value2
в функцию cost
.
Документация networkx
гласит, что weight
может быть вызываемым, который принимает ровно 3 аргумента. Но мне нужны value1
и value2
для расчетов. Как это можно сделать?
Редактировать
Решение с использованием functools работает хорошо. Однако моя функция в классе выглядит следующим образом:
import networkx as nx
import functools
class 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
настаивает на присвоении src
self
. Таким образом, переводчик жалуется, что self
присваивается несколько значений.
Я нуждаюсь в себе для расчета стоимости.