2018年4月14日笔记

  • 函数关键字

def  函数声明

return  返回值

pass  略过,啥也不干

exit(1)  直接退出

 

  • 高阶函数:可接收另一个函数作为参数的函数

常用的高阶函数有:

  1. map()
  2. reduce()
  3. filter()
  4. sorted()  -> 最常用

 

  • map()函数:接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的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]

 

  • 生成器
  1. 方法一: (exp for val in collection if condition)
  2. 方法二:使用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编辑  收藏  举报

导航