Python的一些内建函数

      Python是支持多种范型的语言,可以进行函数式编程,其突出变现在有这么几个函数:map、yield、lambda、filter、reduce等,有了他们,最大的好处就是程序更简洁,恰当的使用这些内建函数,让人感觉更牛X。

1.map:

基本样式为:map(function, sequence)

map()函数接受两个参数,一个是函数,一个是iterable,map将传入的函数依次作用于序列的每个元素,并将结果作为新的iterator返回。如:

>>> def add(x):
...     x += 3
...     return x
...
 
>>> numbers = [1,2,3,4]
>>> new_numbers = []
>>> for i in numbers:
...     new_numbers.append(add(i))
...
 
>>> new_numbers
[4,5,6,7]
 
# 以上为一般方法
# 以下为map方法
 
>>> numbers = [1,2,3,4]
>>> map(add, numbers)
[4,5,6,7]

2.yield:

       在Python中yield是一个关键词,是生成器的标志,含有yield关键词的函数返回值是一个生成器类型的对象,只要用了yield语句,一个普通的函数就神奇的变成了生成器,也就具备了迭代器的功能特性。如:

>>> def fib(n):
...     i, a, b = 0, 0, 1
...     while i < n:
...         yield b
...         a, b = b, a + b
...         i += 1
...
 
>>> g = fib(5)
>>> g
<generator object fib at 0x1080aab40>
>>> for i in g:
...     print i
...
1
1
2
3
5

3.lambda(匿名函数):

基本样式为:lambda arg1,arg2,...argN: expression using arguments

lambda函数的使用方法:

       1.在lambda后面直接跟变量

       2.变量后面是冒号

       3.冒号后面是表达式,表达式计算的结果就是函数的返回值,如:

>>> list1 = [1,2,3,4]
>>> lam = lambda x: x + 3
>>> list2 = []
>>> for i in list1:
...     list2.append(lam(i))
...
>>> list2
[4,5,6,7]

4.filter:

filter的意思是过滤,在Python中,他就是起到了过滤器的作用,用于过滤序列。

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

>>> def is_odd(n):
...     return n % 2 == 1 
 
>>> filter(is_odd, [1,2,3,4])
[1,3]
 
# 在一个list中,删除偶数,保留奇数

5.reduce:

      基本形式为:reduce(function, sequence, start_value),其中start_value为可选参数,即作为初始值调用。

       python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。如:

>>> def add(x, y):
...     return x + y
...
 
>>> reduce(add, (1,2,3,4))
10
>>> reduce(add, [1,2,3,4])
10
>>> reduce(add, [1,2,3,4], 2)
12
 
# 结果为 1+2+3+4 的和

6.sorted():

sorted()函数可以对list进行排序,同时他也是一个高阶函数,他还可以接收一个key函数来实现自定义的排序,如:

>>> list = [1,3,2,-4]
>>> sorted(list)
[-4, 1, 2, 3]
 
>>> sorted(list, key=abs)
[1, 2, 3, -4]  # 按绝对值大小排序
 
>>> sorted(['angel', 'Bob', 'Candy', 'daniel'], reverse=True)
['daniel', 'angel', 'Candy', 'Bob']
 
>>> sorted(['angel', 'Bob', 'Candy', 'daniel'], key=str.lower)
['angel', 'Bob', 'Candy', 'daniel']