鱼C论坛

 找回密码
 立即注册
查看: 2173|回复: 0

[技术交流] 《零基础入门学习Python》第21讲笔记

[复制链接]
发表于 2017-7-12 13:17:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
匿名函数用法:
  1. >>> def ds(x):
  2.         return 2 * x + 1
  3. eg1:
  4. >>> lambda x : 2 * x + 1
  5. <function <lambda> at 0x000001F96CA5D840>
  6. >>> g = lambda x : 2 * x + 1
  7. >>> g(5)
  8. 11
复制代码

注:不使用时自动会把内存删除
  1. eg2:
  2. >>> g = lambda x, y : x + y
  3. >>> g(3, 4)
  4. 7
复制代码

结合filter()了解lambda
eg1:去掉非True的内容(核心!)
  1. >>> list(filter(None, [1, 0, False, True]))
  2. [1, True]
复制代码

eg2:以下内容用lambda表达式只需要一行
  1. >>> def odd(x):
  2.         return x % 2   # 偶数返回0,奇数返回1

  3. >>> temp = range (10)
  4. >>> show = filter(odd, temp)  # 只需要函数名,不需要()
  5. >>> list(show)
  6. [1, 3, 5, 7, 9]
复制代码

一行解决:
(实例:筛选奇数,只需要碰到偶数时,使其返回False,就可以实现过滤)
  1. list(filter(lambda x : x % 2, range(10)))
  2. [1, 3, 5, 7, 9]
复制代码

结合map()
  1. list(map(lambda x : x * 2, range(10)))
  2. [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
复制代码

测试题:
0.        g = lambda x, y = 3 : x * y
1.       
  1. def diaosi(x):
  2.         if x % 2:
  3.                 return x
  4.         else:
  5.                 return None
复制代码

2.        lambda使程序更短了

3.        用filter()和lambda快速求100内所有3的倍数
方法(自己想的!):
  1. >>> a = list(filter(lambda x : not x % 3, range(1,100)))
  2. >>> a
  3. [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组合?
???(忘记了)
  1. >>> [i for i in range(1, 100) if not(i % 3)]
复制代码

5.        复习zip:将两数以元组的形式绑定在一起
  1. list(zip([1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
  2. [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
复制代码

如何做到打包形式为更灵活的列表而不是元组呢?(用map和lambda)

方法(自己想的again!):
  1. b = list(map(lambda x : [x, x+1], [1, 3, 5, 7, 9]))
  2. b
  3. [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
复制代码

论坛方法:
  1. list(map(lambda x, y : [x, y], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
  2. [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
复制代码

注:map()后面可接受多个序列作为参数,且不需要括号包起来。

6.        目测打印内容
  1. def make_repeat(n):
  2.         return lambda s : s * n

  3. double = make_repeat(2)
  4. print(double(8))
  5. print(double('FishC'))
复制代码


目测:
16
FishCFishC

评分

参与人数 2鱼币 +5 收起 理由
小甲鱼 + 3
康小泡 + 2

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 22:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表