您的位置:首页 > 编程语言 > Python开发

python学习---3

2015-12-21 13:26 639 查看
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” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: