【问题标题】:What can I use instead of lambda in my Python code?我可以在我的 Python 代码中使用什么来代替 lambda?
【发布时间】:2022-11-28 15:18:47
【问题描述】:

我想知道我的代码中是否有 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 吗?谢谢!

【问题讨论】:

  • 如果您考虑一下 lambda 表达式的作用,它并没有那么吓人:它接受给它的任何参数(通常您会在将 lambda 传递给的函数的文档中找到这个参数列表);它评估其中的任何表达式,并返回该值。在这种情况下,参数列表是self.attacks 的键,作为“键”返回的值是self.attacks 中该键的值。 min 函数使用键来决定哪个是最小的。你对 lambda 感到困惑吗?

标签: python lambda


【解决方案1】:

你可以为它定义一个函数:

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)

【讨论】:

  • 你的“return_attacks”函数基本上是self.attacks.get。您可以将其用作键(尽管当键 k 不存在时的行为会有所不同(尽管在此用例中不相关)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多