我想知道在我的代码中是否有一个简单的替代lambda的方法。
def add_attack(self, attack_name):
if attack_name in self.known_attacks and attack_name not in self.attacks:
try:
assert(len(self.attacks) < 4)
self.attacks[attack_name] = self.known_attacks.get(attack_name)
return True
except:
#find the min value of self.attacks
minval = min(self.attacks.keys(), key=(lambda k: self.attacks[k]))
for keys, values in self.attacks.items():
if self.attacks[minval] == values and min(minval, keys) == keys:
minval = keys
del self.attacks[minval]
self.attacks[attack_name] = self.known_attacks.get(attack_name)
return True
else:
return False我仍然在学习python,而且lambda函数让我感到厌烦,因为我对它还没有了解多少。不使用lambda,有人能帮助我用另一个函数来代替lambda吗?谢谢!
发布于 2022-11-28 07:07:07
您可以为它定义一个函数:
def return_attacks(self,k):
return self.attacks[k]并在键中使用该函数:
minval = min(self.attacks.keys(), key=(self.return_attacks))我强烈建议您使用lambda函数,而且我认为现在很清楚,当lambda x : expr(x)与func等效时,
def func(x):
return expr(x)发布于 2022-11-28 07:32:04
一只羔羊不应该吓到你!只是个小匿名函数。
它可以使用任意数量的参数,但只能有一个表达式。
minval = min(self.attacks.keys(), key=(lambda k: self.attacks[k]))在这里,您将得到表达式min()作为minval的结果
min函数可以接受键,这里有更多关于这方面的内容。我可以看到它可能会令人困惑,但这个键与字典键不一样。这个键只是告诉min函数它应该如何运行的一种方式。
如果我们回到密码:
因此,该行基本上在self.attacks.keys()中找到最小值,其中包含一个lambda函数,该函数返回self.attacks[]中的每个元素
如果不想使用lambda,则可以在类中编写一个完全相同的函数。
def find_min_key(self, my_dict):
return min(my_dict, key= my_dict.get)您可以将其用作:
min_val = self.find_min_key(self.attacks)https://stackoverflow.com/questions/74597006
复制相似问题