马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
匿名函数用法:>>> def ds(x):
return 2 * x + 1
eg1:
>>> lambda x : 2 * x + 1
<function <lambda> at 0x000001F96CA5D840>
>>> g = lambda x : 2 * x + 1
>>> g(5)
11
注:不使用时自动会把内存删除eg2:
>>> g = lambda x, y : x + y
>>> g(3, 4)
7
结合filter()了解lambda
eg1:去掉非True的内容(核心!)>>> list(filter(None, [1, 0, False, True]))
[1, True]
eg2:以下内容用lambda表达式只需要一行>>> def odd(x):
return x % 2 # 偶数返回0,奇数返回1
>>> temp = range (10)
>>> show = filter(odd, temp) # 只需要函数名,不需要()
>>> list(show)
[1, 3, 5, 7, 9]
一行解决:
(实例:筛选奇数,只需要碰到偶数时,使其返回False,就可以实现过滤)list(filter(lambda x : x % 2, range(10)))
[1, 3, 5, 7, 9]
结合map()list(map(lambda x : x * 2, range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
测试题:
0. g = lambda x, y = 3 : x * y
1. def diaosi(x):
if x % 2:
return x
else:
return None
2. lambda使程序更短了
3. 用filter()和lambda快速求100内所有3的倍数
方法(自己想的!):>>> a = list(filter(lambda x : not x % 3, range(1,100)))
>>> a
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
4. 如何用列表推导式代替filter()和lambda组合?
???(忘记了)>>> [i for i in range(1, 100) if not(i % 3)]
5. 复习zip:将两数以元组的形式绑定在一起list(zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
如何做到打包形式为更灵活的列表而不是元组呢?(用map和lambda)
方法(自己想的again!):b = list(map(lambda x : [x, x+1], [1, 3, 5, 7, 9]))
b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
论坛方法:list(map(lambda x, y : [x, y], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
注:map()后面可接受多个序列作为参数,且不需要括号包起来。
6. 目测打印内容def make_repeat(n):
return lambda s : s * n
double = make_repeat(2)
print(double(8))
print(double('FishC'))
目测:
16
FishCFishC
|