2018年4月14日笔记
- 函数关键字
def 函数声明
return 返回值
pass 略过,啥也不干
exit(1) 直接退出
- 高阶函数:可接收另一个函数作为参数的函数
常用的高阶函数有:
- map()
- reduce()
- filter()
- sorted() -> 最常用
- map()函数:接收两个参数,一个是函数,一个是
Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回
例1:我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4]
上,就可以用map()
实现如下:
- reduce()函数:把一个函数作用在一个序列
[x1, x2, x3, ...]
上,这个函数必须接收两个参数,reduce
把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
例2:写一个将字符串转化为整数的函数,即实现内置int()函数的功能
也可使用lambda简化为:
- filter()函数:接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回true或false,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件的元素组成的list
例3:将一个列表中的奇数过滤出来
- sorted()函数:对所有可迭代的对象进行排序操作
sorted 语法:
sorted(iterable[, cmp[, key[, reverse]]])
参数说明:
- iterable -- 可迭代对象。
- cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
例4:对列表和字典进行排序
- 列表生成式
格式为:[exp for val in collection if condition]
例如,list = [x for x in range(1,10) if x%2==0]
- 生成器
- 方法一: (exp for val in collection if condition)
- 方法二:使用yield关键字,包含yield语句的函数会被特定的编译成生成器。yield可以理解为return,但并不退出,只是挂起,恢复时从yield下面开始执行。
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。
通过next()
函数获得generator的下一个返回值
例:著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...
斐波拉契数列用列表生成式写不出来,但可以用生成器写出来,如下:
posted on 2018-04-15 23:56 Karlkiller 阅读(94) 评论(0) 编辑 收藏 举报