Изучите Python Трудный путь: Упражнение 43 Создание функций
while True:
print "\n--------"
room = getattr(self, next)
next = room()
Мой вопрос связан с приведенным выше блоком кода, который можно найти в разделе "Изучение Python: трудный путь - упражнение 43". Я понимаю, что третья строка хранит getattr()
результаты функции (в этом случае, self.next
) в room
переменная (если я не прав там...?)
То, что вешает меня прямо сейчас, это четвертая строка, где функция room()
хранится в переменной next
, Принципиально я не понимаю room()
часть, поскольку это не определенная функция в блоке кода. Позволяет ли Python пользователю определять функцию на основе предыдущей переменной? (Например: написание room()
впервые создает функцию под названием room()
на основе того, что хранится в переменной room
).
Любая помощь будет принята с благодарностью!
1 ответ
room = getattr(self, next)
Возвращает функцию, которая затем вызывается.
next = room()
Функции в Python являются объектами первого класса, поэтому их можно передавать как таковые. Handy!
Учтите следующее:
>>> 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>