首先,来看一个一般意义的求和: >>> def cal_sum(*args): ... sum = 0 ... for i in args: ... sum = sum + i ... return sum ... >>> cal_sum(1,2,3,4) 10 如果我们这么定义呢: >>> def lazy_sum(*args): ... def sum(): ... sum = 0 ... for i in args: ... sum = sum
闭包(closure) 当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,当内部函数被当做返回值的时候,相关参数和变量保存在返回函数中,这种结果,叫闭包 example1: def test(*args): def test_1(): rst = 0 for i in args:#这里使用了函数外部的参数 rst += i return rst return test_1#将函数作为返回值返回,相关参数和变量保存在返回的函数中 a = test(1,2,3) print(a
原文 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数: def lazy_sum(*args): def sum(): ax = 0 for n in arg
Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright", "credits" or "license()" for more information. >>> def fun1(): return [1,2,3] >>> print(fun1) <function fun1
原文发表在我的博客主页,转载请注明出处 前言 如果把python当作脚本语言,每次就是写个几十行上百行来处理数据的话,装饰器也许不是很必要,但是如果要开发一个大型系统,装饰器是躲不开的,最开始体会ryu的装饰器之美是在阅读ryu源码的时候,用python官网的一句话来说,learning about descriptors creates a deeper understanding of how python works and an appreciation for the elegance