Recently contacted Python, and saw the
return functions in PythonThe concept of previously only touched
function return value, such as Python can return int,str,list,dict and so on type data, here is to say that Python also supports
return function。
First look at the basic syntax that Python supports to return functions
def f (): print ' call F () ... ' # define function g: def g (): print ' call g () ... ' # return function g: return G
Let's implement the summation of a mutable parameter. In general, the function of summing is defined like this:
def calc_sum (*args): ax = 0 for n in args: Ax = ax + n return ax
But what if you don't need to sum it right away, but in the later code, and then calculate it as needed? Instead of returning the result of a sum, you can return a function that sums:
def lazy_sum (*args): def sum (): ax = 0 for n in args: ax = ax + n return ax return sum
When we call Lazy_sum (), we return the SUM function instead of summing the result:
>>> f = lazy_sum (1, 3, 5, 7, 9) >>> f<function lazy_sum.<locals>.sum at 0x101c6ed90>
The result of summing is actually computed when the function f is called:
>>> F () 25
In this example, we define the function sum in the function lazy_sum, and the inner function sum can refer to the arguments and local variables of the external function lazy_sum, and when Lazy_sum returns the function sum, the relevant parameters and variables are stored in the returned function, which is called " The program structure of the closure (Closure) has great power.
Note again that when we call Lazy_sum (), each call returns a new function, even if the same parameter is passed in:
>>> f1 = lazy_sum (1, 3, 5, 7, 9) >>> F2 = lazy_sum (1, 3, 5, 7, 9) >>> F1==f2false
The invocation results of F1 () and F2 () do not affect each other.