lambda是合法的python变量名吗_python – lambda中的变量范围

奇怪的是,这不是一个变量范围问题,而是python for for循环(和python变量)语义的问题.

正如您所期望的那样,我在lambda中正确地引用了最近的封闭范围中的变量i.到现在为止还挺好.

但是,您希望这意味着发生以下情况:

for each value in the list ['a', 'b', 'c', 'd']:

instantiate a new variable, i, pointing to the current list member

instantiate a new anonymous function, which returns i

append this function to cons

实际发生的是:

instantiate a new variable i

for each value in the list ['a', 'b', 'c', 'd']:

make i refer to the current list member

instantiate a new anonymous function, which returns i

append this function to cons

因此,您的代码将相同的变量i附加到列表中四次 – 并且在循环退出时,我的值为“d”.

请注意,如果python函数按值获取并返回其参数/返回值的值,您将不会注意到这一点,因为i的内容将在每次调用时被复制(或者,就此而言,在每次返回时都会复制)用lambda创建的匿名函数.但实际上,python变量总是引用一个特定的对象 – 因此你的四个副本都是在循环结束时引用’d’.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值