[问题] lambda 在循环内设定的问题

楼主: pshuang (中山先生忠实信徒-我爱萝)   2022-03-28 11:22:12
Os环境:Win7
Py版本: 3.8.10
lambda关键字,如果在循环内设定,又没带参数,
感觉结果想不通。想请问原因。
code如下:
#
作者: DaOppaiLoli (大欧派萝莉)   2022-03-28 12:54:00
这应该是 Scope 的关系https://www.ideone.com/txytbg就算写成一般 Function 也会有一样的情况,i 对 lambda 来说是 Global 但 x 对 lambda 来说是 Local
作者: ck574b027 (荒围!定厝!贼!妹!)   2022-03-28 23:37:00
python是用reference(简称位置)在运作的,你说的“当下的i”只是i的位置。又因python改变位置需要透过assignment,而i在for并没有发生这种事,只是在他的位置更新,所以全部lambda都拿着同个i。你可以不要用list comprehension,把第一个例子的[]改成(),结果就会跟第二个一样,因为generator等于在for才建立lambda
作者: poototo (poototo)   2022-03-29 00:19:00
generator也是闭包把local的i让lambda记住才yield出去[]的例子类似js循环的var会共用污染也就是ck大所说的,都去同一addr取值

Links booklink

Contact Us: admin [ a t ] ucptt.com