如何将方法用作字典中的项? Python 2.x

时间:2015-05-24 23:30:08

标签: python function dictionary

我想只在我获取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])

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')}

或者您可以使用deflambda显式创建一个包含方法调用的新函数:

LI={'C': lambda: Dat.LD('A', 'B'),
    'D': lambda: Dat.LD('A', 'C')}