摘自廖雪峰老师教程中的一段代码
>>> def fn(x, y):
... return x * 10 + y
...
>>> def char2num(s):
... return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
...
>>> reduce(fn, map(char2num, '13579'))
13579
其中return{}[]
起到把字符串中的字符转化成int类型的作用。
{ }是字典,[ ]是list,{‘0’:0,…}[‘0’]取出来的就是数字0。
- map函数是一个高阶函数,用于将函数作用于list的每一个元素上并生成一个新的list
- reduce函数把函数作用在一个序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
练习1
利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]。
>>> def da(x):
... return(x[0].upper()+x[1:].lower())
...
>>> map(da,['adam','LISa','barT'])
['Adam', 'Lisa', 'Bart']
>>>
上网百度一下,发现python自带能实现该功能的函数capitalize(),用法为
str.capitalize()
>>> def da1(x):
... return x.capitalize()
...
>>> map(da1,['adam', 'LISA', 'barT'])
['Adam', 'Lisa', 'Bart']
>>>
练习2
>>> def pord(x,y):
... return x*y
>>> reduce(pord,[1,2,3,4])
24
>>>
lambda匿名函数
只能有一个表达式
当把lambda作为返回值时,调用所定义的函数时需要修改形式,如下:
>>> def build(x,y):
... return lambda:x*x+y*y
...
>>> build(2,3)
<function <lambda> at 0x1073692a8>
>>> build(2,3)()
13