函数自己可用变量指向,把变量当作函数参数的函数成为高阶函数python
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次做用到序列的每一个元素,并把结果做为新的Iterator返回。app
举例说明,好比咱们有一个函数f(x)=x2,要把这个函数做用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就能够用map()实现以下:函数
>>> def f(x): ... return x * x ... >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]对象
map()传入的第一个参数是f,即函数对象自己。因为结果r是一个Iterator,Iterator是惰性序列,所以经过list()函数让它把整个序列都计算出来并返回一个list。blog
再看reduce的用法。reduce把一个函数做用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素作累积计算,其效果就是:排序
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)作用域
比方说对一个序列求和,就能够用reduce实现:字符串
>>> from functools import reduce >>> def add(x, y): ... return x + y ... >>> reduce(add, [1, 3, 5, 7, 9])
25class
根据函数的返回结果True or False对list等进行筛选,结果是一个Iteratorimport
例:选出偶素
def odd() n = 1 yield n n = n + 1 def chu() return lambda x : x%2 > 0 # lambda关键字,匿名函数 def oushu() n = odd() while True: t = next(n) output = filter(chu,n) print(list(output))
排序函数
L=[15,-5,6,-89,100]
sorted(L)
[-89,-5,6,15,100]
sorted(L,key=abs)
[-5,6,15,-89,100]
sorted(L,key=abs, reverse = True)
[100,-89,15,6,-5]
字符串排序是根据ASCLL码大小排序
return 返回一个函数值
当把函数计算结果不是当即返回,在调用的时候返回,可用到返回函数。
返回函数里边不要有循环变量
例子:
def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1, f2, f3 = count() >>> f1() 9 >>> f2() 9 >>> f3() 9
若是用到循环变量,就把变量当作参数传进去:
def count(): def f(j): def g(): return j*j return g fs = [] for i in range(1, 4): fs.append(f(i)) # f(i)马上被执行,所以i的当前值被传入f() return fs
计数器函数:
def createCounter : a = 0 def counter: nonlocal a #nonlocal关键字用来在函数或其余做用域中使用外层(非全局)变量。 a = a + 1 return a return counter
能够当作函数返回,能够用变量指向函数
f = lambda x: x*x def lambda(x): return x*x
修饰函数能够看作是返回函数的一种,目的是在函数的执行前或函数执行后先进行相关的处理操做(函数运行期间动态添加功能的成为装饰器),添加在定义函数的前面,实现装饰做用。
例如:
计算函数的执行时间
import time funtools def log(text) def decorator(fnc): @functools.wraps(fnc) def wrapper(*args,**kw): start = time.time() func = fnc(*args,**kw) end = time.time() print(%s : %s excuted in %s ms %(text,func_name_,(start - end)*1000)) return func return wrapper return decorator
固定住某些函数的参数,使函数调用更加方便
例子:
import functools int 2 = functools.partial(int,base = 2) max 2 = functools.partial(max,10) max 2(5,6,7) = 10