Уведомления

Группа в Telegram: @pythonsu

#1 Май 20, 2014 03:49:35

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda

Почему лямбда возвращает int, а не юникод строку?

data = [1, 0, 3, 0, 9]
result = filter(lambda x: unicode(x) if x else None, data)
print(result)

Офлайн

#2 Май 20, 2014 05:10:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

lambda

она не int возвращает, а элемент

>>> filter(bool, [1, 0, 2, 0, 3])
[1, 2, 3]
>>>



Офлайн

#3 Май 20, 2014 07:19:14

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

lambda

заюзай map

Офлайн

#4 Май 20, 2014 08:03:41

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

lambda

И ещё

>>> f1 = unicode
>>> f2 = lambda x: unicode(x)
>>> f1(123)
u'123'
>>> f2(456)
u'456'

Офлайн

#5 Май 20, 2014 12:17:37

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda

Меня интересует не как исправить задачу, а почему так происходит. Потому что в теории она должна вернуть строку.

Офлайн

#6 Май 20, 2014 12:26:53

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

lambda

Это где такая теория озвучена?

data = [1, 0, 3, 0, 9]
result = str(filter(lambda x: unicode(x) if x else None, data))
print(result)

Офлайн

#7 Май 20, 2014 12:51:15

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda

Shaman
Если я не прав и вас не затруднит, объясни пожалуйста как все в действительности происходит.

На сколько я понимаю этот код, то там должна возвращаться строка.

Офлайн

#8 Май 20, 2014 12:57:01

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

lambda

Функция filter в общем случае возвращает те элементы для которых указанная функция возвращает True, или её результат неявно преобразуется к True. На это недвусмысленно указал py.user.next.

Отредактировано Shaman (Май 20, 2014 12:58:57)

Офлайн

#9 Май 20, 2014 13:43:50

d3z0x77+rsmqbc
Зарегистрирован: 2014-01-21
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

lambda

Shaman
Это все я и так знал

Офлайн

#10 Май 20, 2014 13:50:54

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

lambda

Очень на то непохоже. Как Вы узнали что лямбда возвращает int?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version