Secrets about Python return functions and return values

Tomorin
Release: 2018-08-17 17:53:35
Original
1547 people have browsed it

I recently came into contact with python and saw the concept of returning functions in python. I have only been exposed to function return values ​​ before. For example, python can return int, str, list, dict, etc. Type data, what I want to say here is that python also supports return function.

First look at the basic syntax of python's support for return function

def f():
    print 'call f()...'
    # 定义函数g:
    def g():
        print 'call g()...'
    # 返回函数g:
    return g
Copy after login

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
Copy after login

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
Copy after login

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>
Copy after login

The result of the sum is actually calculated when function f is called:

>>> f()
25
Copy after login

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
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact [email protected]
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!