python [pattern for var in iterable]

来源:互联网 发布:网络推广规划 编辑:程序博客网 时间:2024/05/17 22:47
[pattern for var in iterable] 是一个 List comprehension,它的作用是根据pattern(姑且这么叫吧)和每一个var的值,生成一个新的值来构造一个list。在这里,你的pattern是一个匿名函数,这个匿名函数没有参数,每次调用它会返回一个x(注意,这里有大坑)。所以,这个表达式生成了一个list,list中每一个元素是一个匿名函数。既然它是函数,你就可以调用它:for f in li: print(f())或者list(map(lambda x: x(), li))来调用每一元素。然后你会惊奇地发现,你得到一个 9, 9, ..., 9 ..........一般来讲,按照闭包的原则,调用函数时,只跟定义它的时候的环境有关(既当时绑定了哪些变量,定义了哪些函数),也就是 lexical scope 原则,所以你应该期望一个 [0, 1, ... , 9]。具体的讨论见Python 中的 lambda 和「真正的」lambda 有什么区别?作者:知乎用户链接:https://www.zhihu.com/question/52851387/answer/132348480来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原创粉丝点击