Я делаю учебник по жадным алгоритмам и наткнулся на функцию lambda
, переданную как ключевой параметр в sorted (). Я думал, что понял, как они работают (на простых примерах вроде lambda a,b: a+b
), но теперь я запутался, почему последняя строка работает test_greedy(foods, max_cost, lambda x: 1/Food.get_cost(x))
. Я понимаю, что x
должно быть передано из-за self
, и на самом деле это тип Food
. Мне неясно, как и когда создается x
.
Вот соответствующая часть кода:
class Food:
def __init__(self, name, value, weight):
self.name = name
self.value = value
self.calories = weight
def get_value(self):
return self.value
def get_cost(self):
return self.calories
def greedy(items, max_cost, key_function):
"""
key_function maps elements of items to numbers, tells what is meant by "BEST"
"""
items_copy = sorted(items, key = key_function, reverse = True)
result = []
total_value, total_cost = 0.0, 0.0
for i in range(len(items_copy)):
if (total_cost+items_copy[i].get_cost()) <= max_cost:
result.append(items_copy[i])
total_cost += items_copy[i].get_cost()
total_value += items_copy[i].get_value()
return (result, total_value)
def use_greedy(max_cost):
print("Use greedy by cost to allocate", max_cost, "calories")
test_greedy(foods, max_cost, lambda x: 1/Food.get_cost(x))