Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2013 20:31:28

kt368
От:
Зарегистрирован: 2012-01-08
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

Здравствуйте!
Хочу с помощью lambda функции добавить один элемент к списку, пробую сделать так:

l=[]
print((lambda x: x.append(1)) (l))
В результате вижу
None
Ожидал при этом получить список, состоящий из одного элемента, . Что тут неправильно?



Отредактировано kt368 (Фев. 10, 2013 20:38:49)

Офлайн

#2 Фев. 10, 2013 21:07:54

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

lst = []
func = lambda x: lst.append(x)
func(10)
print(lst)  #в данном случае = [10]

Офлайн

#3 Фев. 10, 2013 21:14:49

kt368
От:
Зарегистрирован: 2012-01-08
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

Так то работает, но мне нужно передать в функцию список, а функция должна добавить элемент-константу к списку…Вроде-бы так, но оно не работает:

lst = []
func = lambda x: x.append('const')
print(func(lst))
В результате получаю все тот же None.



Офлайн

#4 Фев. 10, 2013 21:27:07

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

lst = []
func = lambda x: x.append('const')
func(lst)
print(lst)  # ответ ['const']

lambda-функции не требуется инструкция return, следовательно она будет возвращать None т.е. ничего, но при этом список изменится, т.е. ‘const’ в список добавится

Тоже самое можно написать с помощью def/return:
def func1(x):
    x.append('const')
    return x
if __name__ == "__main__":
    lst = []
    print(func1(lst))

Отредактировано smoke853 (Фев. 10, 2013 21:44:19)

Офлайн

#5 Фев. 10, 2013 21:40:45

kt368
От:
Зарегистрирован: 2012-01-08
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

Понятно, просто я забыл что x.append не возвращает ничего.
Тогда подскажите, можно ли сделать такое в одну строку: есть список (lst) из трех чисел, нужно третье число поменять на константу ('const'), полученный список преобразовать в кортеж и записать его в три переменные a,b,c?
Заранее спасибо.



Офлайн

#6 Фев. 10, 2013 21:45:19

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Не работает метод append внутри lambda функции

лямбда возвращает вам результат работы метода append, а не список.
можно написать так:

l=[]
print ((lambda x: (x.append(1)) or x)(l))



Офлайн

#7 Фев. 10, 2013 22:02:54

kt368
От:
Зарегистрирован: 2012-01-08
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

Спасибо! Все получилось!



Офлайн

#8 Фев. 11, 2013 07:12:39

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

можно чище

l = [3]
print((lambda x: x+[1])(l))

Офлайн

#9 Фев. 11, 2013 08:37:32

kt368
От:
Зарегистрирован: 2012-01-08
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

Да, так нагляднее!
Зачем же тогда нужен метод append, если можно просто плюсом добавлять элемент в список?



Офлайн

#10 Фев. 11, 2013 08:41:54

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Не работает метод append внутри lambda функции

эта операция не изменит исходный список в отличии от append

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version