标签:测试
1)高阶函数
变量可以指向函数 abs----变量名,函数的地址
2)函数名也是变量
3)可以传入函数
4)map/reduce/filter/sorted
map函数接收两个变量,一个是函数,一个是序列,map将传入的函数一次作用于序列的每一个元素,将新的结果作为序列返回
#-*- coding:utf-8-*- def f(x): return x*x l=map(f,[1,2,3,4,5,6]) print l
reduce函数也是接收2个参数,一个是函数,一个是序列。不同的是,这个函数必须要有2个参数。如:f(((x1,x2),x3),x4) 结果是只返回一个值
#-*- coding:utf-8-*- def f(x,y): return x+y l=reduce(f,[1,2,3,4,5]) print l
filter函数是过滤序列,也是接收一个函数和一个序列,将传入的函数作用于每一个元素,不同的是根据返回值是true或者false来决定是否保留该元素,最后输出一个序列
#-*- coding:utf-8-*- def f(n): return n%2==1 l=filter(f,[1,2,3,4,5,6]) print l
sorted排序函数,内置的sorted可以自动的对序列进行排序。也可以我们自己定义一个函数来进行排序
#-*- coding:utf-8-*- def f(x,y): u1=x.upper() u2=y.upper() if u1<u2: return -1 if u2>u1: return 1 return 0 l=sorted([‘bob‘,‘abort‘,‘zoo‘,‘Credit‘],f) print l
Note:参数的顺序很重要,调换顺序就不行了。
5)函数作为返回值
这种函数其实就称之为“闭包函数”。
每次循环都创建一个新函数
#-*- coding:utf-8-*- def count(): fs=[] for i in range(1,4): def f(j): def g(): return j*j return g fs.append(f(i)) return fs f1,f2,f3=count()
当f1的时候,它创建了一个新函数,然后返回出来
返回的函数并没有立刻执行,而是直到调用了f()
才执行
当f2的时候,它又创建了一个新函数,与之前的f1有不同的内存空间,所以fs[]是一个新的空的[]
>>> f1 <function g at 0x02A37B30> >>> f2 <function g at 0x02A37AF0> >>> f3 <function g at 0x02A37B70>
6)匿名函数
使用关键字:lambda
lambda x: x*x
x 参数
:表达式
7) 装饰器
想到了junit,有点类似。可以实现多层嵌套。
#-*- coding:utf-8-*- def log(func): def wrapper(*args,**kw): print "You can do sothing in here." return func(*args,**kw) return wrapper @log def f(*args): return args[0]+args[1]
复习:*args属于可变参数,接收的是一个tuple,**kw接收的是一个dict,有key and value
以上代码相当于执行了
now = log(now)
此时 now--->wrapper:now.__name__=‘wrapper‘
所以
@functools.wraps(func)
把函数的名字给改回来
#-*- coding:utf-8-*- import functools def log(func): @functools.wraps(func) def wrapper(*args,**kw): print "You can do sothing in here." return func(*args,**kw) return wrapper @log def f(*args): return args[0]+args[1] print f.__name__
@functools.wraps(func) 要放在声明了func后面。
8)偏函数
functools.partial
的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。
本文出自 “ehealth” 博客,谢绝转载!
标签:测试
原文地址:http://ehealth.blog.51cto.com/10942284/1726762