马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|