Найти - Пользователи
Полная версия: Как работает lambda - функция
Начало » Python для новичков » Как работает lambda - функция
1 2
gmorgunov
Добрый день
Стал разбираться , как работает lambda-функция, и чем дальше-тем непонятнее.Пример взял с http://docs.python.org/tutorial/controlflow.html#lambda-forms
Из примера станет понятно, что непонятно :)
#!/usr/bin/python
# coding: utf-8
#===============================================================
# 1)
f=lambda x,n:x+n
print f(99,1)
# получаем 100
# понятно
#===============================================================
# 2)
def incr(n):
return lambda x:x+n

f=incr(99)
print f(1)
# получаем 100
# не совсем понятно
#===============================================================
# 3)
def incr(x,n):
return lambda x,n:x+n

f=incr(99,1)
print f
# получаем <function <lambda> at 0xb7c2010c> т.е. сегфолт ?
# совсем непонятно
#===============================================================
Объясните , пожалуйста, как передаются параметры в lambda. Можно с (int*) ,(void*) т.е. с использованием С

Спасибо откликнувшимся.
ice
# 2)
def incr(n):
return lambda x:x+n


функция incr(n) возвращает фукцию, которая принимает 1 аргумент, а второй аргумент (n) уже установлен в
f=incr(99)

поэтому возвращается вот такая функция lambda x:x+99

# 3)
def incr(x,n):
return lambda x,n:x+n

Вот этого я не понял для чего сделал.

# 3)
def incr(x,n):
return lambda:x+n

Вот если так:))
тогда

>>> f=incr(99,1)
>>> f()

но, по мойму бесполезно … хотя …
Dimka665
2) функция incr возвращает функцию, которая прибавляет к аргументу n, который задается при вызове incr.
3) получаем функцию, которая складывает 2 аргумента.
параметры передать можно так:
а) def incr():
n = 1
return lambda x:x + n

или так
б) def incr(x,n):
return lambda x,n=n:x+n
gmorgunov
Спасибо ice Dimka665,за то,что откликнулись, но я это проверял раньше( лекции мехмата)
Проверяем сейчас:
#===============================================================
# 2)
def incr(x,n):
n=1
return lambda x:x+n

f=incr(99,1)
print f
#===============================================================
# 3)
def incr(x,n):
return lambda x,n=n:x+n

f=incr(99,1)
print f
#===============================================================
Получаем:
mike@linux:~> ./t.py
<function <lambda> at 0xb7c44684>
<function <lambda> at 0xb7c41ed4>
Т.е. опять - сегфолт.
Александр Кошелев
gmorgunov
Т.е. опять - сегфолт.
а что вы его всё время упоминаете? Где вы его нашли тут? Это абсолютно нормальный результат.
shiza
ы! это не сегфолт.
а как вы думали вам могут функцию напечатать? (не результат ее работы, а саму функцию)
gmorgunov
shiza
ы! это не сегфолт.
а как вы думали вам могут функцию напечатать? (не результат ее работы, а саму функцию)
А как мне получить результат ее работы. Если можно код(так непонятно :) ).
Где ошибка в последних примерах?
shiza
ошибок нет.
f - название фукнции.
f() - так ее вызывают.
print f - напечатали все что могли по названию функции, не вызывая ее (название, место в памяти и пр)
print f() - вызвали функцию, напечатали результат ее работы.
gmorgunov
shiza
ошибок нет.
f - название фукнции.
f() - так ее вызывают.
print f - напечатали все что могли по названию функции, не вызывая ее (название, место в памяти и пр)
print f() - вызвали функцию, напечатали результат ее работы.
Спасибо, пойду проветрюсь, потом обмозгую:
#===============================================================
# 2)
def incr(x,n):
n=1
return lambda x:x+n

f=incr(99,1)
print f(1)
#===============================================================
# 3)
def incr(x,n):
return lambda x,n=n:x+n

f=incr(99,1)
print f(99,1)
#===============================================================
Дает:
2
100
Вроде,что надо :)
ZZZ
Здесь самое главное понять, что в питоне ВСЁ ЯВЛЯЕТСЯ ОБЪЕКТАМИ. Даже функции и лямбды.
Объект может быть вызываемым (как функция, например) а может и нет (int, str…).
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