最近接触python,看到了python中返回函数的概念,以前只接触过函数返回值,比如python就可以返回int,str,list,dict等等类型数据,这里要说的是python还支持返回函数。

首先看看python支持返回函数的基本语法

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

这里,最外层的函数f会返回一个函数g,也就是函数g本身;
下面看看函数调用的过程;(接上面)

>>> x = f()   # 调用f()
call f()...
>>> x   # 变量x就是上面一个最外层函数返回的函数(不是函数值)
<function g at 0x1037bf320>
>>> x()   # x指向函数,因此可以调用,这里就是调用内层函数x()的过程
call g()...   # 调用x()就是执行g()函数定义的代码
  • 只返回函数的作用:
    返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:
def calc_sum(lst):return sum(lst)
>>>calc_sum([1,2,3,4])

结果直接是:10

但是,可以通过返回函数思想写代码,就可以“延时计算”

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

下面是调用:
注意,下面代码并没有对函数进行执行计算出结果,而是返回函数。

>>> f = calc_sum([1, 2, 3, 4])
>>> f
<function lazy_sum at 0x1037bfaa0>

对返回的函数进行调用时,才计算出结果

>>>f()
10

下面是一个例子:
请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
思想:先定义能计算乘积的函数,再将此函数返回。

def calc_prod(lst):def lazy_prod():def f(x,y):return x*yreturn reduce(f,lst,1)return lazy_prodf = calc_prod([1, 2, 3, 4])
print f()

python-返回函数的理解相关推荐

  1. 一篇文章带你搞定Python返回函数

    一.什么是返回函数? 返回函数,简单的说就是返回值是一个函数. 返回的是函数,调用返回的函数的时候才会返回结果. 二.闭包 (以返回函数的形式实现) 相关参数和变量都保存在返回的函数中,这种称为&qu ...

  2. python 返回函数

    返回函数 Python的函数不但可以返回int.str.list.dict等数据类型,还可以返回函数!例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写:def f():print 'c ...

  3. python 返回函数对象_Python—函数对象与闭包

    一 函数对象 函数对象指的是函数可以被当做"数据"来处理,具体可以分为四个方面的使用. 1.1 函数可以被引用 def index(): print('from index') a ...

  4. python 返回函数对象_返回函数

    函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = ...

  5. python 返回函数 闭包_python中闭包Closure函数作为返回值的方法示例

    前言 首先看看闭包的概念:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外 ...

  6. Python——返回函数

    一. 返回函数 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. >>> def lazy_sum(*args): ... def sum(): ... z = 0 ...

  7. python zip()函数的理解与应用

    zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象.如需展示列表,需手动 list() 转换. 用法,zip(it ...

  8. python卷积函数_python – 理解Scipy卷积

    我试图理解Scipy提供的离散卷积与人们将获得的分析结果之间的差异.我的问题是输入信号的时间轴和响应函数如何与离散卷积输出的时间轴相关? 为了尝试回答这个问题,我考虑了一个带有分析结果的例子.我的输入 ...

  9. python return函数_理解Python函数中的return关键字

    一.说明 return 语句是Python函数返回的结果,可以是数值.字符串.列表.表达式.函数等: return 语句将Python函数的结果,返回到调用的地方,并把程序的控制权一起返回,即在函数中 ...

  10. python函数理解,python对函数的理解

    函数 函数可以提高编写代码效率.代码的重用.让程序更小.模块化 可以将一段独立功能的代码集成在一个块中.封装独立功能 # 函数定义(参数名为形式参数) def 函数名(参数名): 函数体 # 调用函数 ...

最新文章

  1. 中国首次纳米孔测序大会:不可错过的教学专场和技术诊断
  2. docker错误 /usr/bin/docker-current: No port specified: xxx:empty
  3. spark 随机森林算法案例实战
  4. boost::mpl模块实现if相关的测试程序
  5. STM32 ISP 下载程序, C源码,
  6. 说说 C 语言中的变量与算术表达式
  7. 【转】WPF Expander 收缩不占空间的用法
  8. 阿里P8架构师谈:高并发与多线程的关系、区别、高并发的技术方案
  9. 【FLink】cannot assign instance LinkedMap FlinkKafkaConsumerBase.pendingOffsetsToCommit
  10. mysql数据库维护重要性_建立MySQL数据库日常维护规范
  11. viewpager实现3D画廊的方法
  12. whale 帷幄:crm客户管理营销系统全称是什么
  13. Python语言特性和优缺点及什么是鸭子类型?
  14. 从聚焦沉淀到探索创新,跨境支付正在酝酿下一个行业浪潮
  15. java interrupt详解_Java线程源码解析之interrupt
  16. 动手实践看懂深度学习的DP和DDP
  17. 线上展厅视觉奇观 广州商迪
  18. 碧桂园香港上市 25岁杨惠妍512亿身家变身首富
  19. 双剑合璧——IT与OT的深度融合之趋
  20. 挑战最强大脑——来自全球的14个编码社区

热门文章

  1. 一年成为独角兽,2021年的跨境电商估值这么高!
  2. 用numpy如何创建一个空数组?
  3. threeJs导入3D皮卡丘.obj模型,使用.jpg贴图,实现缩放旋转查看功能
  4. 微信开放平台商户申请步骤(APP支付方式)
  5. 设计新一代的网游——第三章(游戏概况)
  6. ipmitool介绍_ipmitool
  7. 学习设计模式,你需要这样一份书单!
  8. 骁龙855 plus的存在意义有限,高通5G芯片较对手落后
  9. linux io schedule: CFQ
  10. 每周精品之理财20190325