map()
函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
>>>list(map(str,[1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
reduce()
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)]
filter()
filter()也接收一个函数和一个序列, 返回的是一个Iterator, 也是一个惰性运算,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
defis_odd(n):
returnn %2==1
list(filter(is_odd, [1,2,4,5,6,9,10,15]))
sorted()
sorted(['bob','about','Zoo','Credit'], key=str.lower, reverse=True)
实现了一个映射函数,可以接收三个参数。
闭包:
闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包
首先给出闭包函数的必要条件:
· 闭包函数必须返回一个函数对象
· 闭包函数返回的那个函数必须引用外部变量(一般不能是全局变量),而返回的那个函数内部不一定要return
闭包循环体内定义的函数是可以保存循环执行过程中的不停变化的外部变量
闭包在被返回时,它的所有变量就已经固定,形成了一个封闭的对象,这个对象包含了其引用的所有外部、内部变量和表达式。
闭包函数相对与普通函数会多出一个__closure__的属性,里面定义了一个元组用于存放所有的cell对象,每个cell对象一一保存了这个闭包中所有的外部变量
s.__closure__.cell[0].cell_content()
匿名函数:
lambda表示匿名函数,冒号前面的x表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
list(map(lambdax:x*x,[1, 2, 3, 4, 5, 6, 7, 8, 9]))
装饰器:
decorator可以增强函数的功能
def log(text):
def decorator(func):
def wrapper(*args, **kw):
print('%s %s():'% (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
偏函数:
当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数
>>> import functools
>>> int2 = functools.partial(int, base=2)