Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 5, 2008 14:46:51

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

Добрый день
Стал разбираться , как работает 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*) т.е. с использованием С

Спасибо откликнувшимся.



Офлайн

#2 Ноя. 5, 2008 15:06:58

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

# 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()

но, по мойму бесполезно … хотя …



Офлайн

#3 Ноя. 5, 2008 15:13:58

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

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



Офлайн

#4 Ноя. 5, 2008 15:57:33

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

Спасибо 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>
Т.е. опять - сегфолт.



Офлайн

#5 Ноя. 5, 2008 15:59:53

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Как работает lambda - функция

gmorgunov
Т.е. опять - сегфолт.
а что вы его всё время упоминаете? Где вы его нашли тут? Это абсолютно нормальный результат.



Отредактировано (Ноя. 5, 2008 16:00:27)

Офлайн

#6 Ноя. 5, 2008 16:00:13

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

ы! это не сегфолт.
а как вы думали вам могут функцию напечатать? (не результат ее работы, а саму функцию)



Офлайн

#7 Ноя. 5, 2008 16:20:50

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

shiza
ы! это не сегфолт.
а как вы думали вам могут функцию напечатать? (не результат ее работы, а саму функцию)
А как мне получить результат ее работы. Если можно код(так непонятно :) ).
Где ошибка в последних примерах?



Офлайн

#8 Ноя. 5, 2008 16:26:53

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

ошибок нет.
f - название фукнции.
f() - так ее вызывают.
print f - напечатали все что могли по названию функции, не вызывая ее (название, место в памяти и пр)
print f() - вызвали функцию, напечатали результат ее работы.



Офлайн

#9 Ноя. 5, 2008 16:43:43

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Как работает lambda - функция

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
Вроде,что надо :)



Офлайн

#10 Ноя. 6, 2008 00:50:06

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Как работает lambda - функция

Здесь самое главное понять, что в питоне ВСЁ ЯВЛЯЕТСЯ ОБЪЕКТАМИ. Даже функции и лямбды.
Объект может быть вызываемым (как функция, например) а может и нет (int, str…).



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version