赞
踩
嵌套函数的定义:
如果在一个函数的内部还定义了另一个函数(注意: 是定义,不是引用!),这个函数就叫嵌套函数。外部的我们叫它外函数,内部的我们叫他内函数。
*
def outer_func():
x=1
def inner_func():
result=x+1
print(result)
return inner_func
f1=outer_func()#获得的只是返回的inner_func()的引用,是一个地址。并没有执行返回的引用
print(f1)#引用的输出为一个地址。
输出结果:
<function outer_func.<locals>.inner_func at 0x000001C9DEDDA2F0>
改写:
def outer_func():
x=1
def inner_func():
result=x+1
print(result)
return inner_func
f1=outer_func()
f1()#得到Iner_func的引用后,并执行了该函数。
输出如下:
2
(1)外函数带有参数
def outer_func(x):
def inner_func():
print(x+1)
return inner_func
f1 = outer_func(1) # 返回inner函数对象
print(f1)
输出结果如下:
<function outer_func.<locals>.inner_func at 0x000001C9DEE6BD90>
执行返回的内参数的引用:
def outer_func(x):
def inner_func():
print(x+1)
return inner_func
f1 = outer_func(1) # 返回inner函数对象
f1()
输出结果:
2
(2)内函数带有参数
def outer_func():
def inner_func(x):
print(x+1)
return inner_func
f1 = outer_func() # 返回inner函数对象
print(f1)
输出结果如下:
<function outer_func.<locals>.inner_func at 0x000001C9DEE6BF28>
执行返回的内函数的引用:注意加上内函数的参数!
def outer_func():
def inner_func(x):
print(x+1)
return inner_func
f1 = outer_func() # 返回inner函数对象
f1(10)
执行结果如下:
11
(3)内外函数都含有参数
def outer_func(x):
def inner_func(y):
print(x+y)
return inner_func
f1 = outer_func(1) # 返回inner函数对象,必须加入外函数参数。
print(f1)#打印的是inner_func(y)的引用(地址)。
输出结果如下:
<function outer_func.<locals>.inner_func at 0x000001C9DEDDA488>
调用内函数额引用:
def outer_func(x):
def inner_func(y):
print(x+y)
return inner_func
f1 = outer_func(1) # 返回inner函数对象
f1(20)
输出结果如下:
21
进一步扩展:
当我们将外函数的变量x换成被装饰函数对象(func)
,内函数的变量y换成被装饰函数的参数,我们就可以得到一个通用的装饰器:
def decorator(func):
def inner(*args, **kwargs):
add_other_actions()
return func(*args, **kwargs)
return inner
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。