Python类中引用s的Lambda

2024-04-19 02:01:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用lambda在Python类中定义一个函数,我想引用从中调用它的类的实例,但不知道如何调用。在

properties.append(pf.moleculeProperties())
properties[-1].name = "Monatomic Hydrogen"
properties[-1].formula = "H"
properties[-1].mass = (1.00795e-3)/(6.022e23)
properties[-1].elecLevels = [[pf.waveNumToJoules(82309.58), 1]]
properties[-1].q = lambda T,V : pf.q_trans(properties[-1],T,V) * pf.q_elec(properties[-1],T,V)

properties.append(pf.moleculeProperties())
properties[-1].name = "Monatomic Oxygen"
properties[-1].formula = "O"
properties[-1].mass = (16.0e-3)/(6.022e23)
properties[-1].elecLevels = [[pf.waveNumToJoules(158.265), 1], [pf.waveNumToJoules(226.977), 1], [pf.waveNumToJoules(15867.862), 1],
           [pf.waveNumToJoules(33792.583), 1], [pf.waveNumToJoules(73768.200), 1], [pf.waveNumToJoules(76794.978), 1], [pf.waveNumToJoules(86625.757), 1]]
properties[-1].q = lambda T,V : pf.q_trans(properties[-1],T,V) * pf.q_elec(properties[-1],T,V)

当我试图对列表的最后一个成员以外的其他对象调用q时,它似乎会对properties[-1]语句求值,并且每次都给我该列表的最后一个成员。在这个例子中,我试着调用对应于氢元素的q函数,得到氧的q函数。在


Tags: lambda函数nametranspropertiesmasspfformula
1条回答
网友
1楼 · 发布于 2024-04-19 02:01:49

您需要计算参数列表中的properties,而不是lambda的主体,以便它尽早绑定。因此,将q定义为:

properties[-1].q = lambda T,V,self=properties[-1] : pf.q_trans(self,T,V) * pf.q_elec(self,T,V)

执行上述操作时,self的赋值将计算一次,并永久绑定到lambda。否则,properties将引用父上下文(如您所发现的)。在

相关问题 更多 >