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

Python 函数式编程--返回函数

时间:2016-07-11 01:17:46      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:python、函数式编程、返回函数、闭包

1.1   返回函数

1.1.1   函数作为返回值

>>> def lazy_sum(*args):    #可变参数

...    def sum():

...        ax = 0

...        for i in args:    #调用外部函数的参数

...             ax = ax + i

...        return ax

...    return sum       --这里返回的是个函数

...

>>>

>>>

>>> lazy_sum(1, 3, 5, 7)

<function lazy_sum.<locals>.sum at0x2b8091d87268>

>>> lazy_sum(1,3, 5, 7)()

16

>>> f =lazy_sum(1, 3, 5, 7)

>>> f

<function lazy_sum.<locals>.sum at0x2b8091d87268>

>>> f()

16

注意:当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数

>>> f1 = lazy_sum(1, 3, 5, 7, 9)

>>> f2 = lazy_sum(1, 3, 5, 7, 9)

>>> f1 == f2

False

1.1.2   闭包

看下闭包的问题

>>> def count():

...    fs = []

...    for i in range(1, 4):

...        def f():

...              return i*i

...        fs.append(f)

...    return fs

...

>>> f1, f2, f3 = count()    --变量i都引用的是3

>>>

>>> f1

<function count.<locals>.f at0x2b8091d87488>

>>> f1()

9

>>> f2()

9

>>> f3()

9

回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为9

改写代码

>>> def count():

...    def f(j):

...        return lambda:j*j    --引用j变量,lambda匿名函数不用传参

...    fs = []

...    for i in range(1, 4):

...        fs.append(f(i))

...    return fs

>>> f1()

1

>>> f2()

4

>>> f3()

9


本文出自 “90SirDB” 博客,请务必保留此出处http://90sirdb.blog.51cto.com/8713279/1820912

Python 函数式编程--返回函数

标签:python、函数式编程、返回函数、闭包

原文地址:http://90sirdb.blog.51cto.com/8713279/1820912

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