Что делает лямбда-самостоятельная :do

Этот ответ объясняет, как динамически создавать тестовые случаи.

Код ответа:

class Tests(unittest.TestCase):
    def check(self, i, j):
        self.assertNotEquals(0, i-j)

for i in xrange(1, 4):
    for j in xrange(2, 6):
        def ch(i, j):
            return lambda self: self.check(i, j)
        setattr(Tests, "test_%r_%r" % (i, j), ch(i, j))

Я проверил, и он работает, но я не могу понять как ?

У меня возникли проблемы с пониманием lambda self:магии в игре, в основном:

  1. Используется ли здесь лямбда для выполнения полной противоположностиfunctools.partial()(т.е. для создания функции-оболочки с одним дополнительным параметром это еще не известно)
  2. Является ли selfосмысленным ключевым словом или lambda spamбудет работать так же хорошо?
  3. В какой момент оценивается эта лямбда?
  4. Как получается, что .check()прекрасно работает за пределами classes?
  5. Как это сделать без лямбды? -если я правильно понял,вы должны быть в состоянии обойтись безlambda(не говоря уже о том, что я согласен с Гвидо и Алексом в том, что это бельмо на глазу, и я хочу обойтись без:)

6
задан Community 23 May 2017 в 12:29
поделиться