Сохранить функцию в кортеже без выполнения - PullRequest
4 голосов
/ 25 сентября 2011

У меня есть кортеж, подобный следующему:

self.tagnames = (('string', self.do_anything()),)

Он должен выполнять определенную функцию, если строка соответствует другой. Однако, когда я инициализирую self.tagnames, кажется, что он уже выполняет функцию.

Как исправить проблему, не выполняя функцию при запуске?

Ответы [ 3 ]

4 голосов
/ 25 сентября 2011
self.tagnames = (('string', self.do_anything),)

() - это вызов функции. Если вы хотите отложить вызов на более поздний срок и просто включить ссылку на функцию без таких символов, как это.

2 голосов
/ 25 сентября 2011
self.tagnames = (('string', self.do_anything),)

Вы вызываете функцию с помощью паренов со списком аргументов:

len является функцией, len(s) вызывает эту функцию для аргумента s.Простое использование имени функции дает вам функцию.Оставьте список аргументов в скобках, и вы больше не будете вызывать функцию.

1 голос
/ 25 сентября 2011

Вы должны просто удалить скобки:

self.tagnames = (('string', self.do_anything),)

Очевидно, self.do_anything() вызывает метод немедленно, вместо этого self.do_anything возвращает то, что в Python называется "связанным методом", то есть это вызываемый объект, которому вы можете передать только параметры (если есть), и это приведет вызов метода для конкретного экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...