d3z0x77+rsmqbc
Май 20, 2014 03:49:35
Почему лямбда возвращает int, а не юникод строку?
data = [1, 0, 3, 0, 9]
result = filter(lambda x: unicode(x) if x else None, data)
print(result)
py.user.next
Май 20, 2014 05:10:26
она не int возвращает, а элемент
>>> filter(bool, [1, 0, 2, 0, 3])
[1, 2, 3]
>>>
bismigalis
Май 20, 2014 07:19:14
заюзай map
Shaman
Май 20, 2014 08:03:41
И ещё
>>> f1 = unicode
>>> f2 = lambda x: unicode(x)
>>> f1(123)
u'123'
>>> f2(456)
u'456'
d3z0x77+rsmqbc
Май 20, 2014 12:17:37
Меня интересует не как исправить задачу, а почему так происходит. Потому что в теории она должна вернуть строку.
Shaman
Май 20, 2014 12:26:53
Это где такая теория озвучена?
data = [1, 0, 3, 0, 9]
result = str(filter(lambda x: unicode(x) if x else None, data))
print(result)
d3z0x77+rsmqbc
Май 20, 2014 12:51:15
Shaman
Если я не прав и вас не затруднит, объясни пожалуйста как все в действительности происходит.
На сколько я понимаю этот код, то там должна возвращаться строка.
Shaman
Май 20, 2014 12:57:01
Функция filter в общем случае возвращает те элементы для которых указанная функция возвращает True, или её результат неявно преобразуется к True. На это недвусмысленно указал py.user.next.
d3z0x77+rsmqbc
Май 20, 2014 13:43:50
Shaman
Это все я и так знал
Shaman
Май 20, 2014 13:50:54
Очень на то непохоже. Как Вы узнали что лямбда возвращает int?