Найти - Пользователи
Полная версия: Пара вопросов про lambda и отличие от обычной функции
Начало » Python для новичков » Пара вопросов про lambda и отличие от обычной функции
1
fshshsh
1. Когда создаем обычную функцию, ее имя помещается в глобальный scope? Или в глобальное пространство имен?
2. В чем разница между глобальным scope и глобальным namespace, кстати?
3. lambda вызывается только один раз. Что это значит? Если я вызываю ее в цикле, то на каждой итерации она создается заново (новый анонимный объект-функция) и без сохранения внутреннего состояния (я, правда, пока не нагугливал примеров, где в lambda в теле больше одной операции)?
Rodegast
> ее имя помещается в глобальный scope?

Что такое scope?
doza_and
Rodegast
lambda вызывается только один раз. Что это значит?
Ничего не значит. Ее можно вызвать сколько угодно раз.
 a=lambda :print("qq")
a()
a()

fshshsh
Когда создаем обычную функцию, ее имя помещается в глобальный scope?
Где хотите там и помещаете.

 def a():
   def b():
      pass
fshshsh
Rodegast
> ее имя помещается в глобальный scope?Что такое scope?
Область видимости.

doza_and
Ничего не значит. Ее можно вызвать сколько угодно раз.
Пример кажется не иллюстративным - непонятно отличие от обычной именованной функции. Можно ли неименованную лямбду вызывать в цикле, без связывания ее с переменной? А в аргументе функции?
Shaman
fshshsh
Можно ли неименованную лямбду вызывать в цикле, без связывания ее с переменной?
Проще проверить.
 def a():
    for i in range(10):
        print((lambda x: x * 10)(i))
dis.dis(a)
2 0 SETUP_LOOP 42 (to 45)
3 LOAD_GLOBAL 0 (range)
6 LOAD_CONST 1 (10)
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 GET_ITER
>> 13 FOR_ITER 28 (to 44)
16 STORE_FAST 0 (i)

3 19 LOAD_GLOBAL 1 (print)
22 LOAD_CONST 2 (<code object <lambda> at 0x038AF3E0, file "<pyshell#12>", line 3>)
25 LOAD_CONST 3 ('a.<locals>.<lambda>')
28 MAKE_FUNCTION 0
31 LOAD_FAST 0 (i)
34 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
37 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
40 POP_TOP
41 JUMP_ABSOLUTE 13
>> 44 POP_BLOCK
>> 45 LOAD_CONST 0 (None)
48 RETURN_VALUE
dis.dis(lambda x: x * 10)
1 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (10)
6 BINARY_MULTIPLY
7 RETURN_VALUE
Rodegast
> Область видимости.

Вот так бы сразу и написали.

> Можно ли неименованную лямбду вызывать в цикле, без связывания ее с переменной? А в аргументе функции?

lambda обычно используют как аргумент функции высшего порядка.
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