I recently came into contact with python and saw the concept of returning functionsinpython. I have only been exposed tofunction return valuesbefore. For example, python can return int, str, list, dict, etc. Type data, what I want to say here is that python also supportsreturn function.
First look at the basic syntax of python's support forreturn function
def f(): print 'call f()...' # 定义函数g: def g(): print 'call g()...' # 返回函数g: return g
Let's implement the sum of variable parameters. Usually, the summation function is defined like this:
def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax
However, what if the sum does not need to be summed immediately, but is calculated as needed in the subsequent code? Instead of returning the summation result, you can return the summation function:
def lazy_sum(*args): def sum(): ax = 0 for n in args: ax = ax + n return ax return sum
When we call lazy_sum(), what is returned is not the summation result, but the summation function:
>>> f = lazy_sum(1, 3, 5, 7, 9) >>> f.sum at 0x101c6ed90>
The result of the sum is actually calculated when function f is called:
>>> f() 25
In this example, we define the function sum in the function lazy_sum, and the internal function sum can refer to the parameters of the external function lazy_sum and local variables. When lazy_sum returns the function sum, the relevant parameters and variables are saved in the returned function. This program structure called "Closure" has great power.
Please note one more thing, when we call lazy_sum(), each call will return a new function, even if the same parameters are passed in:
>>> f1 = lazy_sum(1, 3, 5, 7, 9) >>> f2 = lazy_sum(1, 3, 5, 7, 9) >>> f1==f2 False
f1() and f2() The calling results do not affect each other.
The above is the detailed content of Secrets about Python return functions and return values. For more information, please follow other related articles on the PHP Chinese website!