Может кто-нибудь объяснить мне, что происходит в этом коде? - PullRequest
0 голосов
/ 28 мая 2018

Может ли кто-нибудь объяснить мне, что происходит в этом коде и что хранится в дублере и триплере.

Вот код:

def myfunc(n):
  return lambda i: i*n

doubler = myfunc(2)
tripler = myfunc(3)
val = 11
print("Doubled: " + str(doubler) + ". Tripled: " + str(tripler))

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Возвращая lambda i: i*n вы возвращаете функцию, а не значение.Вы должны изменить свой код в:

print("Doubled: " + str(doubler(val)) + ". Tripled: " + str(tripler(val))
0 голосов
/ 28 мая 2018

Ваша функция "myfunc (n)" вернет вам другую (лямбда) функцию, которую вы можете вызвать с помощью doubler (или trippler).

doubler(2) returns 4

Переменные doubler, trippler содержат только ссылкуфункции, поэтому str (doubler) не имеет особого смысла, поскольку он показывает вам строковое представление этой функции с адресом ее памяти.

0 голосов
/ 28 мая 2018

myfunc - это функция, которая создает анонимную функцию (она же lambda)

Так что doubler - это функция , которая удваивает ввод.

При печати выписки вы получаете представление функций, а не результат:

Doubled: <function myfunc.<locals>.<lambda> at 0x0000000003373268>. Tripled: <function myfunc.<locals>.<lambda> at 0x00000000033732F0>

Вы должны позвонить ваши функции, и используя параметр , который вы только что определили.

print("Doubled: " + str(doubler(val)) + ". Tripled: " + str(tripler(val)))

теперь печатает:

Doubled: 22. Tripled: 33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...