Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 25, 2016 10:12:53

fshshsh
Зарегистрирован: 2015-10-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Пара вопросов про lambda и отличие от обычной функции

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

Офлайн

#2 Авг. 25, 2016 10:39:32

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2842
Репутация: +  186  -
Профиль   Отправить e-mail  

Пара вопросов про lambda и отличие от обычной функции

> ее имя помещается в глобальный scope?

Что такое scope?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Авг. 25, 2016 11:14:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Пара вопросов про lambda и отличие от обычной функции

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

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

 def a():
   def b():
      pass



Отредактировано doza_and (Авг. 25, 2016 11:17:22)

Офлайн

#4 Авг. 25, 2016 19:21:26

fshshsh
Зарегистрирован: 2015-10-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Пара вопросов про lambda и отличие от обычной функции

Rodegast
> ее имя помещается в глобальный scope?Что такое scope?
Область видимости.

doza_and
Ничего не значит. Ее можно вызвать сколько угодно раз.
Пример кажется не иллюстративным - непонятно отличие от обычной именованной функции. Можно ли неименованную лямбду вызывать в цикле, без связывания ее с переменной? А в аргументе функции?

Отредактировано fshshsh (Авг. 25, 2016 19:24:46)

Офлайн

#5 Авг. 25, 2016 19:40:14

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Пара вопросов про lambda и отличие от обычной функции

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

Отредактировано Shaman (Авг. 25, 2016 20:04:22)

Офлайн

#6 Авг. 25, 2016 20:27:55

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2842
Репутация: +  186  -
Профиль   Отправить e-mail  

Пара вопросов про lambda и отличие от обычной функции

> Область видимости.

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

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

lambda обычно используют как аргумент функции высшего порядка.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version