如果我用列表理解来做一些事情,它会写到一个局部变量:test = any([i == 2 for i in xrange(10)])上面印着"9“。但是,如果我使用生成器,它不会写入局部变量:test = any(i == 2 for i in xrange(10))上面印着"0“。
有什么好的理由造成这种差异吗?这是一个设计决策,还是只是实现生成器和
比如说,我做了一个清单理解,如下所示:a = [f(i) for i in i]
对于某些函数f。使用与迭代器相同的虚拟名称会产生意想不到的结果吗?有时,我的变量名是单个字母,对我来说,坚持使用同一个字母而不是分配一个新的字母更容易读,比如[f(x) for x in x]而不是[f(i) for i in x] (例如,如果迭代器x的字母是,我会想知道
在这段代码中,lambda中的x引用了for语句中的x。所以y[0]()返回2:y = [lambda : x for x in range(3)]但在这段代码中,lambda中的x引用全局x,因此x[0]()本身返回全局x:x = [lambda : x for x in range(3)]我想知道为什么lambda中的x在第一段代码中引用局部x,而在第二段代码中引用全局x。