python 返回函数

来源:互联网 发布:淘宝登陆账号是什么 编辑:程序博客网 时间:2024/05/14 21:19

转自http://blog.csdn.net/ljp1919/article/details/50937665

1:python返回函数

Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:

def f():     print 'call f()...'    # 定义函数g:    def g():            print 'call g()...'    # 返回函数g:    return g
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在函数 f 内部又定义了一个函数 g。由于函数 g 也是一个对象,函数名 g 就是指向函数 g 的变量,所以,最外层函数 f 可以返回变量 g,也就是函数 g 本身。调用函数 f,我们会得到 f 返回的一个函数:

x = f() # 调用f(),打印结果call f()...# 变量x是f()返回的函数:x() # x指向函数,因此可以调用。#打印结果call g()... # 调用x()就是执行g()函数定义的代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

2:请注意区分返回函数和返回值:

def myabs():    return abs   # 返回函数def myabs2(x):    return abs(x)   # 返回函数调用的结果,返回值是一个数值
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

3:返回函数可以把一些计算延迟执行。

这点其实是回调函数。例如,如果定义一个普通的求和函数:

def calc_sum(lst):    return sum(lst)
  • 1
  • 2
  • 1
  • 2

调用calc_sum()函数时,将立刻计算并得到结果: 
calc_sum([1, 2, 3, 4])#返回结果是10,立刻可以得到 
但是,如果返回一个函数,就可以“延迟计算”:

def calc_sum(lst):    def lazy_sum():        return sum(lst)    return lazy_sum
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

调用calc_sum()并没有计算出结果,而是返回函数:

f = calc_sum([1, 2, 3, 4])f()#调用返回函数进行求和计算
  • 1
  • 2
  • 1
  • 2

4:使用例子

请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。

# -*- coding: utf-8 -*-__author__ = 'liujiepeng'def calc_prod(lst):    def lazy_prod():        def f(x, y):            return x * y        return reduce(f, lst, 1)    return lazy_prodf = calc_prod([1, 2, 3, 4])print f()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

补充reduce: 
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。所以,上述的连乘操作,需要定义如上:

        def f(x, y):            return x * y        return reduce(f, lst, 1)
0 0
原创粉丝点击