Форум сайта python.su
0
Здравствуйте.
Есть такой код из книги Лутца.
def knights():
title = 'Sir'
action = (lambda x: title + ' ' + x)
return action
act = knights()
print act('robin')
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)
Офлайн
103
функция 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')
Отредактировано terabayt (Янв. 6, 2015 09:19:44)
Офлайн
0
Спасибо за ответ, но вопрос в другом.
Если имеется функция в которую передается куча параметров и один из этих параметров должна использовать лямбда то как передавать?
Отредактировано Dolinsk (Янв. 6, 2015 09:35:35)
Офлайн
103
def knights(x): title = 'Sir' action = (lambda y: title + ' ' + x + ' ' + y) return action act = knights('robin') print act('hood')
Офлайн
857
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 >>>
>>> 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)
Офлайн