您好,登录后才能下订单哦!
今天就跟大家聊聊有关列表推导式与生成器怎么在Python中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1. 先看两个列表推导式
def t1(): func1 = [lambda x: x*i for i in range(10)] result1 = [f1(2) for f1 in func1] print result1 def t2(): func2 = [lambda x, i=i: x*i for i in range(10)] result2 = [f2(2) for f2 in func2] print result2
上面是两个列表推导式,里面包含有lambda
表达式。输出结果分别为:
[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
2. 为什么结果会不同
在上面的例子中,列表解析会生成一系列的函数对象。例如
def func(): pass
会产生一个名为func的函数对象。注意不同于func()
,加上小括号以后,此时变为了调用函数对象。
函数对象只有在调用的时候才开始对内部的变量进行引用。在t1()
方法中,对i来说, 当函数对它引用的时候, 它已经变为9, 所以10个函数都引用了i=9
。
而对于t2()
方法来说,lambda
函数相当于变成接受两个参数了,所以返回了不一样的结果。
3. 另外的方式
def t3(): func3 = (lambda x: x*i for i in range(10)) result3 = [f3(2) for f3 in func3] print result3
上面的代码,输出的结果为:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
看完上述内容,你们对列表推导式与生成器怎么在Python中使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。