Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2015 08:43:59

Dolinsk
Зарегистрирован: 2014-09-27
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как lambda получает значение х?

Здравствуйте.
Есть такой код из книги Лутца.

def knights():
title = 'Sir'
action = (lambda x: title + ' ' + x)
return action

act = knights()
print act('robin')
В функции knights() не определено никакого х, однако лямбда непостижимым образом подставляет на место х - ‘robin’.
А если надо передать x и y в функцию knights()?
Пробую:
def knights(x,y):
title = 'Sir'
action = (lambda x: title + ' ' + x)
action1 = action + y
return action1

print knights('robin', 'bobin')
Штанга.
def knights(x,y):
title = 'Sir'
if y == 1:
action = (lambda x: title + ' ' + x)
else:
action = '2'
return action

print knights('robin', 1)
Опять не то.
Как правильно лямбде передавать значения?

Офлайн

#2 Янв. 6, 2015 09:16:36

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как lambda получает значение х?

функция knights() возвращает lambda функцию, вот посмотрите

def knights():
    title = 'Sir'
    action = (lambda x: title + ' ' + x)
    return action
act = knights()
print act
print act('robin')
эт тоже самое что
title = 'Sir'
act2 = (lambda x: title + ' ' + x)
print act2
print act2('robin')
Dolinsk
А если надо передать x и y в функцию knights()?
def knights():
    title = 'Sir'
    action = (lambda x, y: title + ' ' + x + ' ' + y)
    return action
act = knights()
print act('robin', 'hood')
и вы не передаете в функцию никакие параметры, а прост вызываете ее чтобы получить lambda функцию



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Янв. 6, 2015 09:19:44)

Офлайн

#3 Янв. 6, 2015 09:35:11

Dolinsk
Зарегистрирован: 2014-09-27
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Как lambda получает значение х?

Спасибо за ответ, но вопрос в другом.
Если имеется функция в которую передается куча параметров и один из этих параметров должна использовать лямбда то как передавать?

Отредактировано Dolinsk (Янв. 6, 2015 09:35:35)

Офлайн

#4 Янв. 6, 2015 10:34:42

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Как lambda получает значение х?

def knights(x):
    title = 'Sir'
    action = (lambda y: title + ' ' + x + ' ' + y)
    return action
act = knights('robin')
print act('hood')



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Янв. 6, 2015 13:01:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Как lambda получает значение х?

lambda перекрывает аргумент своим аргументом.

>>> def f(x):
...     print('see', x)
...     ret = lambda x: x + x
...     print('see', x)
...     return ret
... 
>>> g = f(3)
see 3
see 3
>>> g(4)
8
>>>

Но если у lambda нет такого аргумента, то она использует ближайший.
>>> def f(x):
...     print('see', x)
...     ret = lambda y: x + x
...     print('see', x)
...     return ret
... 
>>> g = f(3)
see 3
see 3
>>> g(4)
6
>>>

Можно и скомбинировать.
>>> def f(x):
...     print('see', x)
...     ret = lambda x=x: x + x
...     print('see', x)
...     return ret
... 
>>> g = f(3)
see 3
see 3
>>> g(4)
8
>>> g()
6
>>>



Отредактировано py.user.next (Янв. 6, 2015 13:04:34)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version