python – 课堂内的Dictonaries和Lambda?
发布时间:2020-12-20 11:10:22 所属栏目:Python 来源:网络整理
导读:我该怎么做这样的事情: class Foo(): do_stuff = { "A" : lambda x: self.do_A(x),"B" : lambda x: self.do_B(x) }def __init__(self): print "hi"def run(self): muh = ['A','B','A'] for each in muh: self.do_stuff[each](each)def do_A(self,moo): prin
我该怎么做这样的事情:
class Foo(): do_stuff = { "A" : lambda x: self.do_A(x),"B" : lambda x: self.do_B(x) } def __init__(self): print "hi" def run(self): muh = ['A','B','A'] for each in muh: self.do_stuff[each](each) def do_A(self,moo): print "A" def do_B(self,boo): print "B" if(__name__ == '__main__'): aFoo = Foo() aFoo.run() 这导致它给出一个错误,即自己没有在lambda函数中定义,但如果我删除它.它说没有定义do_A或do_B. 编辑 我设法搞清楚了.我需要将lambda表达式更改为以下内容: lambda x,y: x.do_A(y) 我会称之为: self.do_stuff[each](self,each) 这是一个糟糕的主意吗? 解决方法
do_stuff不是示例中的实例变量.它更像是一个静态变量.您需要在方法(例如,init方法)中定义do_stuff,其中您具有对self的引用,以使其成为实例变量.我希望这个例子为你澄清一些事情:
class Foo: def __init__(self): self.do_stuff = { "A": self.do_A,"B": self.do_B } def run(self): for x in ["A","B"]: self.do_stuff[x]("hi") def do_A(self,x): pass def do_B(self,x): pass 请注意,lambda函数不是必需的.您只需在字典中存储对函数本身的引用即可.符号“self.do_A”将自动传递self作为第一个参数. 编辑:有谁知道如何使下划线在非代码示例文本中正确显示? 编辑:WTH?预览显示的下划线与帖子不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |