python函数返回列表_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

执行结果

1144139-20170510233718238-60643432.png

可以看出返回是一个函数体没有执行,并且每次运行返回的值是不一样的即使每次传递的参数是一样的

修改代码最后加一行

print f()

1144139-20170510233926972-615735048.png

加了()函数才会执行

这种程序结构成为闭包

为了更好理解函数返回的是函数体只有在调用的时候才会执行,在来看一个例子

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() #执行查看结果

执行结果

1144139-20170511000300535-1911624333.png

输出的前面三行的执行三次循环得到的fs以及i的值及i*i的值,第四行是循环结束后得到的fs列表和i的值 第五行是count函数返回的列表fs赋值给f1,f2,f3

第六行是执行的时候输出的结果,因为这个时候i的值已经是3了所以得到的结果是9,9,9

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值