day7返回函数

"""
在函数内部,是可以定义子函数的。
作为高阶函数,可以接受函数作为参数,其实高阶函数,除了不仅仅可以返回int、str、list、dict等数据类型,
还可以返回函数。因此,可以把函数的子函数返回。
"""
def func():
    def sub_func():
        print('call sub func')
    sub_func()


func()       # call sub func


# return 返回函数
def f():
    print('call f()....')
    def g():
        print('call g()....')
    return g


x = f()
print(x)    # 变量x是f()返回的函数:g
x()     # 相当于是g()

"""
打印结果:
call f()....
<function f.<locals>.g at 0x0000021372391310>
call g()....
"""


"""
返回函数和返回函数值的语句是非常类似的,返回函数时,不能带小括号,而返回函数值时,则需要带上小括号以调用函数
"""
def myabs():
    return abs

def myabsA(x):
    return abs(x)

a = myabsA(-1)
print(a)


"""
返回函数可以将一些计算延迟执行,举个例子,定义一个普通的求和函数。
"""
def calc_sum(list_):
    return sum(list_)

print(calc_sum([1, 2, 3, 4, 5]))    # 调用函数立即得到结果



def calc_sum(list_):
    def lazy_sum():
        return sum(list_)
    return lazy_sum

s = calc_sum([1, 2, 3, 4, 5])
print(s())


# 练习:编写一个函数calc_prod(list_),它接收一个list,返回一个函数,返回函数可以计算参数的乘积
from functools import reduce

def calc_prod(list_):
    def lazy_():
        def chengji(x ,y):
            return x * y
        return reduce(chengji, list_)
    return lazy_

y = calc_prod([1, 2, 3, 4, 5])
print(y())

 

posted @ 2023-03-09 00:14  雪儿来  阅读(13)  评论(0编辑  收藏  举报