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())