我试图用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函数。在
您需要计算参数列表中的
properties
,而不是lambda的主体,以便它尽早绑定。因此,将q
定义为:执行上述操作时,
self
的赋值将计算一次,并永久绑定到lambda。否则,properties
将引用父上下文(如您所发现的)。在相关问题 更多 >
编程相关推荐