返回函数
.note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","STHeiti","Microsoft YaHei","WenQuanYi Micro Hei",SimSun,Song,sans-serif;}

.note-content h2 {line-height: 1.6; color: #0AA89E;}
.note-content {background: #FFFFFF;}
.note-content h1 {color: #7AB3A7;}
.note-content h3 {color: #147A67;}

返回函数

Python函数不但能返回int、str、list、dict等数据类型,还可以返回函数。

举个栗子:定义一个函数f(),让它返回一个函数g

1.def f():
2. print 'call f()...'
3. #定义函数g
4. def g():
5. print 'call g()...'
6. #返回函数g
7. return g

调用函数 f,我们会得到 f 返回的一个函数:

1.>>> x = f()   # 调用f()
2.call f()...
3.>>> x # 变量x是f()返回的函数:
4.<function g at 0x1037bf320>
5.>>> x() # x指向函数,因此可以调用
6.call g()... # 调用x()就是执行g()函数定义的代码

请注意区分返回函数和返回值:

1.def myabs():
2. return abs # 返回函数
3.def myabs2(x):
4. return abs(x) # 返回函数调用的结果,返回值是一个数值

返回函数可以把一些计算延迟执行。例如,如果定义一个普通的求和函数:

1.def calc_sum(lst):
2. return sum(lst)

调用calc_sum()函数时,将立刻计算并得到结果:

1.>>> calc_sum([1, 2, 3, 4])
2.10

但是,如果返回一个函数,就可以“延迟计算”:

1.def calc_sum(lst):
2. def lazy_sum():
3. return sum(lst)
4. return lazy_sum

调用calc_sum()并没有计算出结果,而是返回函数:

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

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

1.>>> f()
2.10

由于可以返回函数,我们在后续代码里就可以决定到底要不要调用该函数。

再例如要编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。

1.def calc_prod(lst):
2. def prob():
3. def f(x,y):
4. return x*y
5. return reduce(f,lst,1)
6. return prob
7.
8.f = calc_prod([1, 2, 3, 4])
9.print f()

Python进阶之返回函数的更多相关文章

  1. python进阶之魔法函数

    __repr__ Python中这个__repr__函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串.如果我们直接打印一个类,向下面这样 class A():     ...

  2. Python中的返回函数与闭包

    返回函数,顾名思义,就是高阶函数可以把函数作为return值返回.与闭包的关系是:闭包需要以返回函数的形式实现. 一. 返回函数 比如我们有一个求和函数: >>> def calc_ ...

  3. Python进阶之匿名函数(关键词lambda)

    匿名函数 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB"," ...

  4. python函数式编程——返回函数

    1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 2.闭包 注意到返回的函数在其定义内部引用了局部变量args,所以,当一个函数返回了一个函数后,其内部的局部变量还 ...

  5. Python高级教程-返回函数

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

  6. Python 进阶 之 enumerate()函数

    enumerate()是Python的内置函数,无需依赖包,enumerate()作用是可以将生成器包装成生成器,类似于range,但enumerate()可以自动生成索引. enumerate(pa ...

  7. Python基础(返回函数)

    #我们在函数lazy_sum中又定义了函数f1,并且,内部函数f1可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数f1时,相关参数和变量都保存在返回的函数中,这种称为&qu ...

  8. python进阶之内置函数和语法糖触发魔法方法

    前言 前面已经总结了关键字.运算符与魔法方法的对应关系,下面总结python内置函数对应的魔法方法. 魔法方法 数学计算 abs(args):返回绝对值,调用__abs__; round(args): ...

  9. Python进阶-VI 生成器函数进阶、生成器表达式、推导式

    一.生成器函数进阶 需求:求取移动平均数 1.应用场景之一,在奥运会气枪射击比赛中,每打完一发都会显示平均环数! def show_avg(): print('你已进入显示移动平均环数系统!') a ...

随机推荐

  1. ORACLE告警日志

    告警日志介绍 告警日志文件是一类特殊的跟踪文件(trace file).告警日志文件命名一般为alert_<SID>.log,其中SID为ORACLE数据库实例名称.数据库告警日志是按时间 ...

  2. MySql命令行命令和SQL语句

    一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...

  3. (原) Jquery 判断设备是PC端,还是移动端

    判断设备是PC端,还是移动端 var ua = navigator.userAgent.toLocaleLowerCase(); var pf = navigator.platform.toLocal ...

  4. nsstring 替换

    -(NSString*)searchaAndPlacing:(NSString*)string { NSString *text=[string stringByReplacingOccurrence ...

  5. Node.js服务的重启与监控

    开始:Node +服务文件名 停止:直接快捷键Ctrl+C 监控:1.安装 npm install supervisor -g, 2.supervisor app.js 参考:http://blog. ...

  6. c++试题

    一.写一个函数找一个字符串中出现频率最高的字符(若最高的相同,取先出现的) char finchar(const char *str) { ; } ]; , n = ; ; str[i]!=; i++ ...

  7. ps切片

    (一)我们需要把中间的图切成一块一块. 首先在放入PS中: [视图]——>[标尺],为的是能够精确的切图: 标尺打开后上下左右都可以往图中拉线,我们在这边叫作(参考线),然后使用左边的[放大镜] ...

  8. _OBJC_CLASS_$_ errors 错误解决办法

    步骤如下图: 1. 点击 Manage Schemes 2. Shared打对勾即可

  9. VS2010 CLR20r3 devenv.exe 错误的解决--vs重启解决方案

    VS2010 CLR20r3 devenv.exe 错误的解决   最近我的vs2010经常过段时间就报CLR20r3错误的解决,出现这个异常我的vs2010就要重启,很是烦人,这么搞没法干活也. 搜 ...

  10. 在ubuntu10.0.4下更新git

    今天想到要在ubuntu10.0.4下下载android的源码学习一下.源码下载用到了git.以前安装过git以为应该没什么问题的,没想到报了 “fatal: git 1.7.2 or later r ...