码迷,mamicode.com
首页 > 编程语言 > 详细

python学习---3

时间:2015-12-21 16:25:16      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:测试

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” 博客,谢绝转载!

python学习---3

标签:测试

原文地址:http://ehealth.blog.51cto.com/10942284/1726762

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!