Найти - Пользователи
Полная версия: Как lambda получает значение х?
Начало » Python для новичков » Как lambda получает значение х?
1
Dolinsk
Здравствуйте.
Есть такой код из книги Лутца.
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)
Опять не то.
Как правильно лямбде передавать значения?
terabayt
функция 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 функцию
Dolinsk
Спасибо за ответ, но вопрос в другом.
Если имеется функция в которую передается куча параметров и один из этих параметров должна использовать лямбда то как передавать?
terabayt
def knights(x):
    title = 'Sir'
    action = (lambda y: title + ' ' + x + ' ' + y)
    return action
act = knights('robin')
print act('hood')
py.user.next
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
>>>
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