Мне присвоен класс, который реализует очередь приоритетов, используя функцию для оценки приоритета.Как передать два аргумента с одной переменной в функцию?
class PriorityQueueWithFunction(PriorityQueue):
"""
Implements a priority queue with the same push/pop signature of the
Queue and the Stack classes. This is designed for drop-in replacement for
those two classes. The caller has to provide a priority function, which
extracts each item's priority.
"""
def __init__(self, priorityFunction):
# type: (object) -> object
"priorityFunction (item) -> priority"
self.priorityFunction = priorityFunction # store the priority function
PriorityQueue.__init__(self) # super-class initializer
def push(self, item):
"Adds an item to the queue with priority from the priority function"
PriorityQueue.push(self, item, self.priorityFunction(item))
Я также получил заданную функцию приоритета, которую я собираюсь инициализировать выше.
def manhattanHeuristic(position, problem, info={}):
"The Manhattan distance heuristic for a PositionSearchProblem"
xy1 = position
xy2 = problem.goal
return abs(xy1[0] - xy2[0]) + abs(xy1[1] - xy2[1])
Приведенный выше код предоставляется нам, и мы не можем его изменить. Я должен создать этот класс PriorityQueueWithFunction и нажать на него элемент. push Функция моего класса принимает аргумент, элемент. Но моя PriorityFunction занимает 2. Какие аргументы я должен использовать для ввода правильного элемента в мой класс, а также для того, чтобы моя приоритетная функция работала правильно?
Вот то, что я пытался, и я получаю ошибку компиляции, manhattanHeuristic ... принимает 2 аргумента, 1 дано
#Creating a queingFn
queuingFn = PriorityQueueWithFunction(heuristic)
Frontier = queuingFn
#Creating the item that needs to be pushed
StartState = problem.getStartState()
StartNode = (StartState,'',0,(-1,-1))
#Here is my problem
item = StartState , problem
Frontier.push(item)
Должен ли я изменить форму моего элемента? Есть идеи ?
посмотрите на '* args' и' ** kwargs' , Они позволяют передавать произвольное количество данных в функцию с использованием одной (или двух) переменных. Вы можете распаковать их внутри функции. –
В вашем случае это должно быть так же просто, как добавление звезды '*' infront 'item'. –