码迷,mamicode.com
首页 > 编程语言 > 详细

廖雪峰python摘录4

时间:2017-09-02 23:26:13      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:lis   code   函数对象   def   most   mod   lazy   不能   strong   

1、直接作用于for循环的对象统称为可迭代对象:Iterable。    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

2、生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

listdictstrIterable变成Iterator可以使用iter()函数

3、因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

4、我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

5、函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

6、高阶函数英文叫Higher-order function。

(1)变量可以指向函数 1 >>> f = abs 2 >>> f(-10) 3 10 说明变量f现在已经指向了abs函数本身。直接调用abs()函数和调用变量f()完全相同

(2)把abs指向10后,就无法通过abs(-10)调用该函数了!因为abs这个变量已经不指向求绝对值函数而是指向一个整数10

1 >>> abs = 10
2 >>> abs(-10)
3 Traceback (most recent call last):
4   File "<stdin>", line 1, in <module>
5 TypeError: int object is not callable

7、我们先看map。map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

 8、reduce()函数也是Python内置的一个高阶函数。

reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

9、

1 >>> from functools import reduce
2 >>> def fn(x, y):
3 ...     return x * 10 + y
4 ...
5 >>> def char2num(s):
6 ...     return {‘0‘: 0, ‘1‘: 1, ‘2‘: 2, ‘3‘: 3, ‘4‘: 4, ‘5‘: 5, ‘6‘: 6, ‘7‘: 7, ‘8‘: 8, ‘9‘: 9}[s]
7 ...
8 >>> reduce(fn, map(char2num, ‘13579‘))
9 13579

里面的char2num()依次把输入的单个str‘1’转换成1   

 10(例题)、利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam‘, ‘LISA‘, ‘barT‘],输出:[‘Adam‘, ‘Lisa‘, ‘Bart‘]

list(map(lambda x:x.capitalize(),[‘mike‘,‘jack‘]))       

map()传入的第一个参数是f,即函数对象本身。由于结果r是一个IteratorIterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

感觉lambda运用更广,不但abs(),而且x.capitalize()

11、和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

12、此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序

13、高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

14、我们在函数lazy_sum中又定义了函数sum,并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。   返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。

 

廖雪峰python摘录4

标签:lis   code   函数对象   def   most   mod   lazy   不能   strong   

原文地址:http://www.cnblogs.com/xflqm/p/7466718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!