Python返回函数

函数作为返回值

def my_sum(*args):
def my_add():
    s = 0
    for n in args:
        s = s + n
    return s
return my_add

f = my_sum(*range(100))  #错误写法 f = my_sum(range(100))
print f()

f1 = lazy_sum(1, 3, 5, 7, 9)
f2 = lazy_sum(1, 3, 5, 7, 9)
print  f1==f2

输出:
4950
False
  • 调用mysum函数时,返回的是求和函数,但是已经包含了传给mysum函数的参数,故最后调用的时候不用再传参;
  • my_sum函数参数是一个可变参数,而调用时的实参时range(10),是一个list,要将list变成可变参数,需在前面加上*;
  • 两次调用该函数,即使传入的参数一模一样,返回的是一个新的函数,也不同;

闭包

示例1:

def count():
fs = []
for i in range(1, 4):
    def f():
         return i*i
    fs.append(f)
return fs

f1, f2, f3 = count()
print f1(),f2(),f3()
  • 返回函数在其定义内部引用了局部变量args,所以,当一个函数返回一个函数后,其内部的局部变量还被新函数引用;
  • 返回的函数并没有立刻执行,而是等调用了之后才执行;
  • fs是一个储存函数名的list,此时实际打印结果为:9 9 9,原因在于返回的函数引用了变量i,但它并非立刻执行,等到3个函数都返回的时候,i已经变成了3

示例2

def count1():
fs = []
for i in range(1,4):
    def f(j):
        def g():
            return j*j
        return g
    fs.append(f(i))
return fs

f11, f22, f33 = count1()
print f11(),f22(),f33()
  • 这里再创建一个函数,将该函数的参数绑定循环变量当前的值,无论该循环变量如何更改,已经绑定的函数参数值不变
posted @ 2016-04-13 16:40  早上好王木木  阅读(606)  评论(0)    收藏  举报