3
while True:
    print "\n--------"
    room = getattr(self, next)
    next = room()

我的问题源于上面的代码块,可在Learn Python The Hard Way -练习 43中找到。我知道第三行将getattr()函数结果(在本例中self.next为 )存储到room变量中(除非我错了......?)

现在让我感到困惑的是第四行,函数room()存储在变量next中。从根本上说,我不理解这room()部分,因为这不是代码块中定义的函数。Python 是否允许用户根据前面的变量定义函数?(例如:room()第一次编写会room()根据存储在变量中的内容创建一个调用的函数room)。

任何帮助将不胜感激!

4

1 回答 1

5
room = getattr(self, next)

返回一个可调用的函数

next = room()

函数是 python 中的第一类对象,因此它们可以这样传递。便利!

考虑以下:

>>> class foo:
      def bar(self):
        print 'baz!'
      def __init__(self):
        # Following lines do the same thing!
        getattr(self, 'bar')()
        self.bar() 
>>> foo()
baz!
baz!
<__main__.foo instance at 0x02ADD8C8>
于 2012-12-08T00:29:03.540 回答