返回函数
.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. IE6、7下获得offset值跟其他浏览器不一样问题

    大家都知道,offset是元素的位置坐标,那位置坐标又和文档流有关系.如果position默认不设置的话,其值是static.static是个什么东东呢?下面我详细介绍一下: 语法: position ...

  2. js正则判断电话/手机/邮箱/

    用途:校验ip地址的格式 输入:strIP:ip地址返回:如果通过验证返回true,否则返回false:*/ function isIP(strIP) { if (isNull(strIP)) ret ...

  3. ASP.NET程序代码优化的七个方面

     ASP.NET程序性能优化的七个方面      一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比 ...

  4. SQL————高级查询

    高级查询 --连接查询 select * from 表1,表2 ————形成笛卡尔积 select * from 表1,表2 where 表1.主键=表2.外键  ————主外键位置可以互换 --jo ...

  5. JavaScript Dispatch Event

    <html> <head> <script type="text/javascript"> function performClick(elem ...

  6. Java与C++相异的地方

    继承标识:Java使用extends/implement,C++使用: super:调用父类的某些东西 instanceof:RTTI机制(A is instanceif B) final:类似于C+ ...

  7. OpenCV配置(Java)

    配置环境:MyEclipse2013+Jdk1.7(32位)+OpenCV 2.4.8+win8.1(64位) OpenCV安装路径:d:\Users\opencv为例 1.       导入Jar包 ...

  8. sass颜色

    1只定义一次颜色 {优点:可以给变量赋予不同的值: {缺点:变量名称更改与变量值混乱: 2变浅加深 /*颜色函数*/ .warning-box { background-color:lighten($ ...

  9. PHP不显示报错了怎么办~

    php.ini里设置吧, 找到 display_errors, 设置成on, error_reporting = E_ALL

  10. Sublime Text2使用技巧

    推荐Lucifr和JerryQu的几篇博文: Sublime Text 2 入门及技巧 via: http://lucifr.com/139225/sublime-text-2-tricks-and- ...