列表推导式与生成器怎么在Python中使用

今天就跟大家聊聊有关列表推导式与生成器怎么在Python中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. 先看两个列表推导式

列表推导式与生成器怎么在Python中使用

deft1():
func1=[lambdax:x*iforiinrange(10)]
result1=[f1(2)forf1infunc1]
printresult1
deft2():
func2=[lambdax,i=i:x*iforiinrange(10)]
result2=[f2(2)forf2infunc2]
printresult2

上面是两个列表推导式,里面包含有lambda表达式。输出结果分别为:

[18, 18, 18, 18, 18, 18, 18, 18, 18, 18][0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

2. 为什么结果会不同

在上面的例子中,列表解析会生成一系列的函数对象。例如

deffunc():
pass

会产生一个名为func的函数对象。注意不同于func(),加上小括号以后,此时变为了调用函数对象。

函数对象只有在调用的时候才开始对内部的变量进行引用。在t1()方法中,对i来说, 当函数对它引用的时候, 它已经变为9, 所以10个函数都引用了i=9

而对于t2()方法来说,lambda函数相当于变成接受两个参数了,所以返回了不一样的结果。

3. 另外的方式

deft3():
func3=(lambdax:x*iforiinrange(10))
result3=[f3(2)forf3infunc3]
printresult3

上面的代码,输出的结果为:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

看完上述内容,你们对列表推导式与生成器怎么在Python中使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。

发布于 2021-04-03 22:31:33
收藏
分享
海报
0 条评论
170
上一篇:迭代器与生成器怎么在Python中使用 下一篇:xmlSerializer怎么在C#项目中使用
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码