Найти - Пользователи
Полная версия: Не работает метод append внутри lambda функции
Начало » Python для новичков » Не работает метод append внутри lambda функции
1
kt368
Здравствуйте!
Хочу с помощью lambda функции добавить один элемент к списку, пробую сделать так:
l=[]
print((lambda x: x.append(1)) (l))
В результате вижу
None
Ожидал при этом получить список, состоящий из одного элемента, . Что тут неправильно?
smoke853
lst = []
func = lambda x: lst.append(x)
func(10)
print(lst)  #в данном случае = [10]
kt368
Так то работает, но мне нужно передать в функцию список, а функция должна добавить элемент-константу к списку…Вроде-бы так, но оно не работает:
lst = []
func = lambda x: x.append('const')
print(func(lst))
В результате получаю все тот же None.
smoke853
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))
kt368
Понятно, просто я забыл что x.append не возвращает ничего.
Тогда подскажите, можно ли сделать такое в одну строку: есть список (lst) из трех чисел, нужно третье число поменять на константу ('const'), полученный список преобразовать в кортеж и записать его в три переменные a,b,c?
Заранее спасибо.
truporez
лямбда возвращает вам результат работы метода append, а не список.
можно написать так:
l=[]
print ((lambda x: (x.append(1)) or x)(l))
kt368
Спасибо! Все получилось!
sergeek
можно чище
l = [3]
print((lambda x: x+[1])(l))
kt368
Да, так нагляднее!
Зачем же тогда нужен метод append, если можно просто плюсом добавлять элемент в список?
sergeek
эта операция не изменит исходный список в отличии от append
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB