«Я» в лямбда-выражении Python - PullRequest
5 голосов
/ 15 ноября 2011
def buildTestCase(xmlfile, description, method, evalString):
  func = lambda self, xmlfile=xmlfile, method=method, evalString=evalString: \
       method(self, evalString, feedparser.parse(xmlfile))  
  func.__doc__ = description
  return func

Выше приведен фрагмент кода из feedparser, почему в методе определения функции есть «self» (self, evalString, feedparser.parse (xmlfile))?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 15 ноября 2011

self просто ссылается на первый аргумент лямбды с именем self.

имя self не является зарезервированным ключевым словом, это просто соглашение над pythonistas для именования экземпляра объекта, к которому применяется функция.здесь автор использует имя self в качестве первого аргумента лямбды, потому что этот аргумент получит экземпляр объекта, к которому лямбда будет применять метод, указанный в аргументе с именем method.

3 голосов
/ 15 ноября 2011

Методы можно вызывать через их класс, передавая экземпляр класса в качестве первого аргумента. Поскольку первый аргумент нормального метода называется self по соглашению, он сохраняется здесь.

>>> class C(object):
...   def foo(self):
...     print 42
... 
>>> c = C()
>>> C.foo(c)
42
2 голосов
/ 15 ноября 2011

Эта лямбда предназначена для использования аналогично методу класса.self является экземпляром класса, почти таким же, как self в любом другом методе.

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