首先看一下函数的递归调用(recursion)
看两个经典的例子:一个是计算阶乘的,一个是计算乘方的
1.
>>> deffactorial(n):
>>>factorial(10)
3628800
第二个:
>>> defpower(x,n):
>>> power(2,4)
16
>>>
下面介绍三个个有用的内建函数:
1 map()
Map函数是通过执行一个函数,把一个序列变成另外一个序列。它的返回值是一个列表list
可以看一下它的help信息:
map(...)
下面看几个列子:
>>>map(ord,'Hello,World')
[72, 101, 108, 108, 111, 44, 87, 111, 114, 108, 100]
>>>map(chr,[72,101,108,108,111,44,87,111,114,108,100])
['H', 'e', 'l', 'l', 'o', ',', 'W', 'o', 'r', 'l', 'd']
>>>
2 filter()
Filter函数就是一个滤波器,它可以把一个序列中我们不想的元素滤掉,然后返回一个新的list,tuple,orstring。看help的信息。
filter(...)
看例子:
>>>numbers=map(ord,'Hello,World')
>>> numbers
[72, 101, 108, 108, 111, 44, 87, 111, 114, 108, 100]
>>> filter(lambdan:n%2= =0,numbers)
[72, 108, 108, 44, 114, 108, 100]
这里是把偶数给过滤出来了。这里用到了lambda表达式。他是一个简单的函数,;lambda是keyword,n是参数,然后一个冒号后跟一个表达式,整个函数就是返回这个表达式的值。
其实map和filter的功能都可以由list自己来实现,看例子:
>>>numbers=map(ord,'Hello,World')
>>> [chr(n) for nin numbers]
['H', 'e', 'l', 'l', 'o', ',', 'W', 'o', 'r', 'l', 'd']
>>> [ord(c) for cin 'Hello,World']
[72, 101, 108, 108, 111, 44, 87, 111, 114, 108, 100]
>>> [n for n innumbers if n%2= =0]
[72, 108, 108, 44, 114, 108, 100]
>>>
但是一点,内建函数map和filter处理的速度是要快一点的。
3 reduce()
Reduce是处理列表里面的元素的,根据给定的函数先处理前两个元素,生成的新元素在和第三个元素一起处理,以此类推。直至生成最后一个数。
reduce(...)
例子:
>>> reduce(lambdax,y:x+y,[1,2,3,4,5,6])
21
实现的过程其实就(((((1+2)+3)+4)+5)+6)
其实就是相当于sum()函数
>>>sum([1,2,3,4,5,6])
21
>>>
函数是相当灵活的,只有用了才知道。