shithon 2

Jul. 8th, 2021 02:52 am
[personal profile] ex0_planet
Дивные проектные решения принятые разработчиками сабжа по накурке не перестают удивлять.

Как, оказывается, связываются свободные переменные в питоновских лямбдах!? По ссылке? По значению? Мимо! ПО ИМЕНИ и SCOPE !!!! То есть вот это работает:
>>> i=3
>>> add=lambda x:i+x
>>> add(3)
6
>>> i=[1,2]
>>> add([3])
[1,2,3]


По неопытности можно себе как-нибудь все волосы изорвать.

Date: 2021-07-07 11:13 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Ну я б не спешил критиковать. Таков уж у них scope. Closure, чо.

Date: 2021-07-07 11:31 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
var i = 3
let plus = x => i + x
println(plus(2))
i="3"
println(plus(2))

5
32

Date: 2021-07-08 12:51 am (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

null3

Date: 2021-07-08 06:48 am (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Так в большинстве динамических языков

Переменные с лексическим Scope связываются в Lexical environment.
Глобальные, как в данном случае остаются таковыми, т.е. по имени.

Date: 2021-07-08 07:34 pm (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Если в Python локальные переменные есть только у функций, то - да.
в Лисп бы это было:
(setq add
  (let ((i 3)) (lambda (x) (+ i x))))



Date: 2021-07-08 08:25 pm (UTC)
chaource: (Default)
From: [personal profile] chaource
Я бы понималъ этотъ кодъ такъ:

i = 3 # Ввели новую переменную `i`.
add = lambda x : i + x # Запомнили ссылку на `i`.
i = [1, 2] # Модифицировали опредѣленную выше `i`. Это не новая перемѣнная.
add([3]) # [1, 2] + [3] потому что `add` содержитъ ссылку на `i`.

Date: 2021-07-09 05:43 am (UTC)
chaource: (Default)
From: [personal profile] chaource
А съ обычными функцiями (не лямбдами) не то же самое?

$ python3
>>> i=1
>>> def f():
... return i
...
>>> f()
1
>>> i=2
>>> f()
2
Edited Date: 2021-07-09 07:30 am (UTC)

Profile

ex0_planet

April 2023

S M T W T F S
      1
234567 8
910111213 1415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 25th, 2026 03:49 am
Powered by Dreamwidth Studios