gpt4 book ai didi

python - 我在 Python 混合理解列表和 lambda 函数中不理解的行为

转载 作者:行者123 更新时间:2023-11-28 21:20:49 25 4
gpt4 key购买 nike

<分区>

我不理解一段代码的行为,涉及在不同对象中调用方法的 lambda 函数的理解列表。它发生在一个大型程序中,所以对于这个问题,我做了一个无意义的玩具箱来表明我的观点:

class Evaluator(object):
def __init__(self, lft, rgt):
self.lft = lft
self.rgt = rgt

def eval(self, x):
return self.lft + x * (self.rgt - self.lft)


if __name__ == "__main__":
ev1 = Evaluator(2, 3)
ev2 = Evaluator(4, 5)
ev3 = Evaluator(6, 7)
funcs = [lambda x:ev.eval(x+0.1) for ev in (ev1, ev2, ev3)]
print([f(0.5) for f in funcs])

我得到的输出是[6.6, 6.6, 6.6],这意味着它是ev3中的方法,它一直在被评估。而不是 [2.6, 4.6, 6.6],正如我所期望的那样。但真正让我感到惊讶的是,如果我去掉 lambda 函数,行为就没问题了:

class Evaluator(object):
def __init__(self, lft, rgt):
self.lft = lft
self.rgt = rgt

def eval(self, x):
return self.lft + x * (self.rgt - self.lft)

if __name__ == "__main__":
ev1 = Evaluator(2, 3)
ev2 = Evaluator(4, 5)
ev3 = Evaluator(6, 7)
funcs = [ev.eval for ev in (ev1, ev2, ev3)]
print([f(0.5) for f in funcs])

返回 [2.5, 4.5, 6.5]。谁能解释这里发生了什么?我应该如何以 Python 固有的方式对此进行编码?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com