python 内函数_python-学习笔记 内部函数

内部函数

Python可以在函数内部再定义一个函数。这个定义的内部函数可以引用外部函数的参数和局部变量。

事实上,内部函数还可以在其中再定义内部函数,实现内部函数多重嵌套。

例如:

def fun_outer(x, y):

def fun_inner(z):

def fun_inner_inner(h):

return x+y+z+h

return fun_inner_inner(100)

return fun_inner(20)

print fun_outer(1, 2)

返回函数本身

函数本身也是一个对象。因此我们可以在函数内将一个内部函数返回。返回该函数的时候,携带了该内部函数引用的外部函数参数和局部变量。

def fun_outer(x, y):

def fun_inner(z):

def fun_inner_inner(h):

return x+y+z+h

return fun_inner_inner(100)

return fun_inner(20)

f = fun_outer(1, 2)

print f

打印的结果为. 此时fun_outer(1, 2)得到的是一个函数对象,该函数对象携带了两个参数值,即x=1与y=2。

如何让它进一步计算呢,此时我们再执行f(3)就会返回结果6。

每次返回的函数都是不同的对象

f1 = fun_outer(1, 2)

f2 = fun_outer(1, 2)

print f1

print f2

print的结果为:

内部函数本身被返回时,所携带的参数或局部变量时return那一刻的值

例如在函数内有循环,内部函数引用的循环变量。

def fun_outer(x, y):

funcs = []

for i in range(0,3):

def fun_inner():

return x+y+i

funcs.append(fun_inner)

return funcs

func1, func2, func3 = fun_outer(1, 2)

print func1(),func2(),func3()

打印结果竟然三个函数都是5.其实这时候func_outer函数在返回一个函数列表的时候,i已经循环到2了。因此func1、func2、func3携带的i参数都已经是2了。因此最终计算结果都是5.

如何实现在有循环变量的时候,返回的函数携带的变量都是循环当时的值呢?

方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变.

def fun_outer(x, y):

funcs = []

for i in range(0,3):

def fun_inner(c):

def fun_inner_inner():

return x+y+c

return fun_inner_inner

funcs.append(fun_inner(i))

return funcs

func1, func2, func3 = fun_outer(1, 2)

print func1(),func2(),func3()

打印结果:3 4 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值