我想只在我获取for中的项目时才使用该方法。 但是,当cicle启动时,所有方法都被调用。 我试过使用dict [key](功能参数),但我不知道参数 在最后一部分中。
class Func():
def LD(self,r,r2):
self.reg[str(r)]=self.reg[str(r2)]
self.cic[0]=self.cic[0]+4
self.cic[1]=self.cic[1]+1
self.cic[2]=self.cic[2]+1
print 'LD '+str(r)+','+str(r2)
class Data(Func):
reg={'A':0,'B':0,'C':12,'D':0,'E':0,'H':0,'L':0,'F':0,'IX':0,'IY':0}
cic=[0,0,0]
Dat=Data()
LI={'C':Dat.LD('A','B'),'D':Dat.LD('A','C')}
LD={'A':Dat.LD('D','E'),'B':Dat.LD('D','F')}
L={'1':LD,'2':LI}
Cod=['1A','2D']
cont=0
for temp in L:
if Cod[0] in temp:
if Cod[1] in temp[cod[0]]:
temp[cod[0]].get(cod[1])
答案 0 :(得分:4)
您的问题是,您首先没有将方法放入字典中,而是调用方法,并将结果放入词典。例如:
LI={'C':Dat.LD('A','B'),'D':Dat.LD('A','C')}
立即调用Dat.LD('A', 'B')
,并将其设为'C'
键的值。
这正是partial
函数的用途。正如文档所说:
partial()
用于部分函数应用程序,它“冻结”函数的参数和/或关键字的某些部分,从而产生具有简化签名的新对象。例如,partial()
可用于创建一个callable,其行为类似于int()
函数,其中base参数默认为2:
>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18
因此,对于您的问题,您需要一个行为类似Dat.LD
方法的新对象,但参数已经在#34;冻结在"作为'A', 'B'
:
from functools import partial
LI={'C': partial(Dat.LD, 'A', 'B'),
'D': partial(Dat.LD, 'A', 'C')}
或者您可以使用def
或lambda
显式创建一个包含方法调用的新函数:
LI={'C': lambda: Dat.LD('A', 'B'),
'D': lambda: Dat.LD('A', 'C')}