python – 课堂内的Dictonaries和Lambda?

我该怎么做这样的事情:

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?预览显示的下划线与帖子不同.

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...