python中高阶函数与装饰器(2)

函数返回值为内置函数名:

def sum(*args):
    def sum_in():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum_in

当我们调用sum()时,返回的并不是求和结果,而是求和函数:

>>> f = sum(1, 3, 5, 7, 9)
>>> f
<function sum.<locals>.sum_in at 0x101c6ed90>

调用函数f时,才真正计算求和的结果:

>>> f()
25

25

在这个例子中,我们在函数sum中又定义了函数sum,并且,内部函数sum_in可以引用外部函数sum的参数和局部变量,当sum返回函数sum_in时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

请再注意一点,当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数:

>>> f1 = sum(1, 3, 5, 7, 9)
>>> f2 = sum(1, 3, 5, 7, 9)
>>> f1==f2
False

f1()f2()的调用结果互不影响。

一个函数可以返回一个计算结果,也可以返回一个函数。

返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。

时间: 2024-10-06 08:53:17

python中高阶函数与装饰器(2)的相关文章

Python高阶函数之 - 装饰器

高阶函数:  1. 函数名可以作为参数传入     2. 函数名可以作为返回值. python装饰器是用于拓展原来函数功能的一种函数 , 这个函数的特殊之处在于它的返回值也是一个函数 , 使用python装饰器的好处就是在不用更改原函数代码的前提下给函数增加新的功能, 装饰器的原理即是闭包. 原文地址:https://www.cnblogs.com/chenbin93/p/8988712.html

python 高阶函数与装饰器

高阶函数定义1.函数接收的参数是一个函数名2.函数的返回值是一个函数名以上两者满足任意一个,就是高阶函数 装饰器定义本质就是函数,功能是为其他函数添加新功能 装饰器的原则 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式 装饰器=高阶函数+函数嵌套+闭包     # 无返回值无参数 import time def timer(func): #func = test def w(): start_time = time.time() func(

python学习笔记之函数总结--高阶函数以及装饰器

python学习笔记之函数总结--高阶函数以及装饰器 Python特点: 1.不是纯函数式编程(允许变量存在): 2.支持高阶函数(可以传入函数作为变量): 3.支持闭包(可以返回函数): 4.有限度的支持匿名函数: 高阶函数: 1.变量可以指向函数: 2.函数的参数可以接收变量: 3.一个函数可以接收另一个函数作为参数: 下面我将示例一些函数的写法以及使用,并说明python中函数的特性: 1.基本的高阶函数示例: #!/usr/bin/env python def func():      

python学习笔记4:高阶函数,装饰器,生成器,迭代器

一.高级函数1.把一个函数名当作实参传给另一个函数2.返回值包含函数名>>> def bar():... print ("in the bar")... >>> def foo(func):... res=func()... return res... >>> foo(bar)in the bar 二.嵌套函数在函数中定义另一个函数 三.装饰器装饰器本质上是函数,作用是装饰其他函数,就是为其他函数添加附加功能.原则1:不能修改被装饰

高阶函数和装饰器

函数式:一种编程范式 纯函数式编程:没有变量,支持高阶函数编程 Python不是纯函数式编程语言,支持高阶函数编程 变量可以指向函数,函数名就是指向函数的一个变量,与普通变量没有区别 高阶函数:能接收函数做参数的函数. map():是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. def f(x): return x*x print map(f, [1, 2, 3, 4, 5, 6, 7

Python入门之函数的装饰器

本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 =========================================================== 一.开放封闭原则 引子--为什么要用装饰器 软件一旦上线后,对修改源代码是封闭的,对功能扩展是开放的. 也就是说我们必须找到一种解决方案: 能够在不修改一个功能源代码以及调用方式的前提下,为其加上新功能 总结,原则如下: 1.不

Python(十) 函数式编程: 匿名函数、高阶函数、装饰器

一.lambda表达式 lambda parameter_list: expression # 匿名函数 def add(x,y): return x+y print(add(1,2)) f = lambda x,y: x+y print(f(1,2)) 二.三元表达式 # x >y ? x :y # 条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果 x= 2 y=1 r = x if x > y else y print(r) # 2 三.map 四.map与lambda

13.函数式编程:匿名函数、高阶函数、装饰器

# def add(x,y): # return x + y # print(add(1,2)) # 3 # 匿名函数 # lambda表达式 # f = lambda x,y:x + y # print(f(1,2)) # # 三元表达式 # x = 2 # y = 1 # r = x if x > y else y # print(r) # 2 # map # list_x = [1,2,3,4,5,6,7,8] # def square(x): # return x * x # 方法1 #

五、python函数、装饰器、内置函数、json及模块

一.递归调用 1.一个函数自己调用自己就是递归调用,最多一个函数递归调用自己999次,超过就会出错2.递归必须有一个明确的结束条件3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少4.递归效率不高,少用递归 eg:def test1(): num = int(input('please enter a number:')) if num%2==0:#判断输入的数字是不是偶数 return True #如果是偶数的话,程序就退出了,返回true print('不是偶数请重新输入!') r