Форум сайта python.su
Добрый день
Стал разбираться , как работает 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> т.е. сегфолт ?
# совсем непонятно
#===============================================================
Офлайн
# 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()
но, по мойму бесполезно … хотя …
Офлайн
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
Офлайн
Спасибо 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
#===============================================================
Офлайн
gmorgunovа что вы его всё время упоминаете? Где вы его нашли тут? Это абсолютно нормальный результат.
Т.е. опять - сегфолт.
Отредактировано (Ноя. 5, 2008 16:00:27)
Офлайн
ы! это не сегфолт.
а как вы думали вам могут функцию напечатать? (не результат ее работы, а саму функцию)
Офлайн
shizaА как мне получить результат ее работы. Если можно код(так непонятно :) ).
ы! это не сегфолт.
а как вы думали вам могут функцию напечатать? (не результат ее работы, а саму функцию)
Офлайн
ошибок нет.
f - название фукнции.
f() - так ее вызывают.
print f - напечатали все что могли по названию функции, не вызывая ее (название, место в памяти и пр)
print f() - вызвали функцию, напечатали результат ее работы.
Офлайн
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)
#===============================================================
Офлайн
Здесь самое главное понять, что в питоне ВСЁ ЯВЛЯЕТСЯ ОБЪЕКТАМИ. Даже функции и лямбды.
Объект может быть вызываемым (как функция, например) а может и нет (int, str…).
Офлайн