Python 课堂上的口述和Lambda?

Python 课堂上的口述和Lambda?,python,lambda,Python,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_st

我怎样才能做这样的事情:

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 x, y: x.do_A(y)
这导致它产生一个错误,该错误在lambda函数中没有定义self,但是如果我删除它。它说“做A”或“做B”没有定义

编辑

我设法弄明白了。我需要将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 x, y: x.do_A(y)
我可以这样称呼它:

self.do_stuff[each](self, each)

这是一个糟糕的想法吗?

在您的示例中,dou 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作为第一个参数

编辑:有人知道如何在非代码示例文本中正确显示下划线吗?

编辑:什么?预览显示的下划线与帖子显示的下划线不同。

要使下划线正常工作,请使用\将其转义,例如\uu init__