lambda表达式与for循环的搭配用法

您所在的位置:网站首页 python中的lambda用法 lambda表达式与for循环的搭配用法

lambda表达式与for循环的搭配用法

#lambda表达式与for循环的搭配用法| 来源: 网络整理| 查看: 265

lambda表达式与for循环的搭配用法 开篇-遇到的问题 给出一个值 x ,分别计算 x 与 0~5 之间各个数的和 # 给出一个值 x ,分别计算 x 与 0~5 之间各个数的和 res=[lambda x,i=i:x+i for i in range (6)] print(res) #得到返回 x+i 函数的五个地址 for f in res: #循环遍历每个地址 print(f(2)) #对每个遍历到的函数 传递参数 x=2 #2 3 4 5 6 7

问题一:lambda表达式,在内部嵌套for循环,怎么用的?如果for循环在外部又会怎么样? 问题二:lambda表达式外部加上[]的用法

知识回顾

语法:lambda 变量1,变量2,…,变量N : 使用变量的表达式

注意 :(1)可以无参,调用时不可以在参数表中赋值; t = lambda : Tru >>True (2) 无参,直接返回值 等效为: def f(): return x (3) 有参,调用时直接给变量赋值 (4) 后面表达式不能使用未定义的变量,可以使用匿名函数外定义的变量

lambda表达式在for循环内部,和append搭配 代码:输出 0~4 所有数的的幂 li=[] for x in range(5): li.append(lambda x: x**2) print(li[0](1)) #li得到的是个列表,里面存的可不是计算出来的数,而是五个函数地址 ''' print(li) 输出五个函数的地址: [] [, ] [, , ] [, , , ] [, , , , ] ''' # li,[]内是地址的索引位置 print(li[1](2)) #4 # print(li[0](2)) #4 # print(li[4](3)) #9 首先直接输出执行:print(li) li 得到的是个列表,但是里面存的不是计算出来的幂,而是五个函数地址 预计是得到 0,1,2, 9,16原因是:循环的 x 并没有传递给 lambda 里面的 x ,只是让它生成多个 x**2 函数

总结: lambda在for循环内部,和append搭配时,for循环不是为了给函数传递参数,只是为了生成多个函数。

问:什么时候for循环可以给lambda参数那?

*其实for在lambda内部可以给参数,但是,即使给出参数也不一定都会参与lambda表达式中的计算并得结果。

有以下两种情况: 放在()中的lambda与for搭配 放在[]中的lambda与for搭配*

一、放在小括号()中,参数由for循环给出,搭配append

li=[] li.append(lambda : x for x in range(5)) # 是否能得到0,1,2, 9,16 ??? #print(li) #[]

分析: 1.内部 lambda : x for x in range(5)这是函数

2,加上小括号()!!!

# res=(lambda : x for x in range(5)) # print(res) 输出:

因此:(lambda : x for x in range(5))这种形式,返回值是一个generator(生成器)

整体,加入空列表后,在列表的内部就存了一个生成器 # li=[] # li.append(lambda : x for x in range(5)) 用next()调用一下 print(next(li[0])()) # 0 print(next(li[0])()) # 1 print(next(li[0])()) # 2 当地址变为1时:报错 print(next(li[1])()) # IndexError: list index out of range

二、放在[ ]中、参数由for循环给出

li = [lambda :x for x in range(5)]

首先直接输出:print(li) 输出的是五个函数(return x )地址

注意:不是生成器,与上面别混淆,(lambda :x for x in range(5))这种形式,返回值是一个generator(生成器) [, , , , ]

分析: 首先:lambda :x for x in range(5)仍然是一个函数(返回 x) 再者,加上中括号后:输出的是五个函数(return x )地址 再执行 print(li0),就会输出x的值

print(li[0]()) # 4 print(li[1]()) # 4

因此:直接套 [ ]也是输出不了循环的各个数值的计算结果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3