nuBacuk
@nuBacuk
Python/Linux

Как использовать лямбда-выражения?

Добрый день, помогите поправить часть кода. Нашел библиотеку но она была написана для второго питона, ругается на строку с лямбда-выражением.

def avhash(im):
    if not isinstance(im, Image.Image):
        im = Image.open(im)
    im = im.resize((8, 8), Image.ANTIALIAS).convert('L')
    avg = reduce(lambda x, y: x + y, im.getdata()) / 64.
    return reduce(lambda x, (y, z): x | (z << y),
                  enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())),
                  0)


Ошибка
Traceback (most recent call last):
  File "tt.py", line 27, in <module>
    hash1 = avhash(img1)
  File "tt.py", line 11, in avhash
    return functools.reduce(lambda x, y, z: x | z << y, enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())),0)
TypeError: <lambda>() missing 1 required positional argument: 'z'
  • Вопрос задан
  • 319 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Попробуй lambda x, (y, z): x | (z << y) заменить на lambda x, yz: x | (yz[1] << yz[0]). Распаковка картежей в параметрах была убрана из python 3 в соответствии с PEP 3113.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы