Python之返回函数
高阶函数可以把函数作为一个结果值返回
举例说明
普通的求积函数是
vim day5-6.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
def product(*arg): #定义求积函数
a = 1 #初始值
for i in arg: #迭代循环传递的列表
a = a * i
return a #返回值 f = product(1,2,3,4) print f
运行结果24
如果不需要立即运算而是要在以后的程序中有需要的时候在运算,可以不返回结果而是返回函数
vim day5-7.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
def lazy_product(*arg):
def product():
a = 1
for i in arg:
a = a * i
return a
return product f = lazy_product(1,2,3,4) print f
执行结果
可以看出返回是一个函数体没有执行,并且每次运行返回的值是不一样的即使每次传递的参数是一样的
修改代码最后加一行
print f()
加了()函数才会执行
这种程序结构成为闭包
为了更好理解函数返回的是函数体只有在调用的时候才会执行,在来看一个例子
vim day5-8.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs f1, f2, f3 = count()
print f1(),f2(),f3()
输出会是什么呢
首先来分析函数的执行过程
1,def count():把函数count放入内存
2,f1, f2, f3 = count()调用函数把函数生成的列表分别返回给f1,f2,f3
count函数是执行一个循环并且把循环生成的函数体返回
3,执行f1,f2,f3
有人认为返回应该是1,4,9 其实返回是9,9,9
原因在于函数内引用了变量i但是没有立即执行,知道调用的时候才执行,这个时候i的值已经变为3了
为了更好了看清楚执行过程,修改一下代码,把每一步的执行结果输出
vim day5-9.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
def count():
fs = []
for i in range(1,4):
def f():
return i*i
fs.append(f)
print fs,i,fs[i-1]() #输出每一次循环时候得到的函数体f,i的值(1,2,3)以及执行这个函数的结果
print fs,i #三次循环结束以后得到的fs列表
return fs #把列表作为函数的返回值,列表内容为函数体
f1,f2,f3 = count() #调用count函数把结果返回给f1,f2,f3
print f1,f2,f3 #查看f1,f2,f3得到的函数体
print f1(),f2(),f3() #执行查看结果
执行结果
输出的前面三行的执行三次循环得到的fs以及i的值及i*i的值,第四行是循环结束后得到的fs列表和i的值 第五行是count函数返回的列表fs赋值给f1,f2,f3
第六行是执行的时候输出的结果,因为这个时候i的值已经是3了所以得到的结果是9,9,9
Python之返回函数的更多相关文章
- python基础——返回函数
python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...
- python中返回函数
Python的函数不但可以返回int.str.list.dict等数据类型,还可以返回函数! 例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写: def f(): print 'cal ...
- Python:Base4(map,reduce,filter,自定义排序函数(sorted),返回函数,闭包,匿名函数(lambda) )
1.python把函数作为参数: 在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数: def add(x, y, f): return f(x) + f(y) 如果传入abs作为参数 ...
- python的高级特性3:神奇的__call__与返回函数
__call__是一个很神奇的特性,只要某个类型中有__call__方法,,我们可以把这个类型的对象当作函数来使用. 也许说的比较抽象,举个例子就会明白. In [107]: f = abs In [ ...
- python 返回函数
返回函数 Python的函数不但可以返回int.str.list.dict等数据类型,还可以返回函数! 例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写: def f(): print ...
- python学习之---匿名函数,返回函数,偏函数
1. 返回函数: 所谓的返回函数,指的是函数作为返回值.高阶函数除了可以接受函数作为参数外,同样可以接受函数作为结果返回.以下是一个可变参数的求和例子,一般求和函数是如此这般定义的: >> ...
- Python进阶之返回函数
返回函数 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB"," ...
- 2017寒假零基础学习Python系列之函数之 返回多个值
Python也和C语言一样有自己的标准库,不过在Python中叫做模块(module),这个和C语言中的头文件以及Java中的包类似,其中math就是其中之一,math模块中提供了sin()和cos( ...
- python -- 返回函数、匿名函数、装饰器
返回函数 高阶函数的参数可以是函数,那么其返回值也可以是函数. 闭包 对于高阶函数,内部函数可以引用外部函数的参数和局部变量.当调用外部函数返回内部函数时,相关参数和变量都保存在返回的函数(即内部函数 ...
随机推荐
- Gson和Json
一下内容为复制别人的: Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库.可以将一个 JSON 字符串转成一个 Java 对象,或者反过来. j ...
- 用C语言写的万年历---亲手写的。好累哦
#include <stdio.h>#include <stdlib.h>#include <string.h>#define str " SUN ...
- Nginx网站使用CDN之后禁止用户真实IP访问的方法
做过面向公网WEB的运维人员经常会遇见恶意扫描.拉取.注入等图谋不轨的行为,对于直接对外的WEB服务器,我们可以直接通过 iptables .Nginx 的deny指令或是程序来ban掉这些恶意请求. ...
- 将ROS中的/sensor_msgs/NavSatFix数据导入google earth显示轨迹
将ros中的gps_msg数据导入google earth显示轨迹 [TOC] 1. 获取GPS数据 将ros中发布的gps topic输出到文本中 rostopic echo -p /gpsData ...
- Python之路-计算机基础
一·计算机的组成 一套完整的计算机系统分为:计算机硬件,操作系统,软件. 硬件系统:运算器,控制器和存储器 ,输入设备,输出设备. 1.运算器:负责算数运算和逻辑运算,与控制器一起组成CPU. 2 ...
- MySQL---连接器(python如何操作数据库媒介,基于python语言)
MySQL — 连接器 连接器的概念 它们往往是一类Python包,或者是一类已经写好的Python库.这些库提供了我们Python去连接数据库服务器的基本功能. 既然它是一个包,那么我们首先学会 ...
- 修改数据库用户名--CMD环境执行有效
--CMD环境执行有效 --修改数据库用户名 select * from user$ where name='aa'; update user$ set name='bb' where name ...
- mock.js-无需等待,随机产生数据,让前端独立于后端进行开发
mock.js所做的 基于 数据模板 生成模拟数据. 基于 HTML模板 生成模拟数据. 拦截并模拟 ajax 请求. Mock.js官方网址:http://mockjs.com/ 1.Mock.js ...
- linux里的那么点东西(持续更新)
作为一个程序猿的确是应该上的了windows,下的了linux的.但是由于没有对linux产生一些刚性的需求,所以使用的次数还是略少,对一些基本的concept和command还是有一些生疏.借着最近 ...
- linux ssh免密码登录的原理
免密码登录原理 图解,server A免登录到server B: 1.在A上生成公钥私钥. 2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了) 3.Se ...