1 内部函数
Python可以在函数中定义另外一个函数。
当需要在函数内部多次执行复杂任务时,内部函数非常有用。
2 闭包
若调用某函数时,该函数将其内部定义的函数作为返回值,则所返回的函数称为闭包(closure)。或者说,如果在一个内部函数里,对在外部作用域(非全局变量)进行引用,这个内部函数就是闭包。
闭包是将函数的语句和执行环境打包在一起得到的对象,当执行嵌套函数时,闭包将获取内部函数所需的整个环境,嵌套函数可以使用外层函数中的变量而不需要通过参数引用。
内部函数直接使用外部函数的参数,外部函数直接返回内部函数(相当于内部函数的复制),而不是调用它。所以内部函数形成一个闭包:一个被动态创建的可以记录外部变量的函数。
当闭包执行完成后,仍能够保持当前的运行环境,并且可以根据外部作用域的变量得到不同的结果。
3 匿名函数:lambda()函数
Python中,lambda函数是用一条语句表达的匿名函数。可以用它来代替小的函数。
在lambda语句中,冒号前为参数,冒号后为函数定义。
通常,使用实际函数会比使用lambda更清晰明了。但是,当需要定义很多小的函数以及记住它们的名字时,lambda会非常有用。尤其是在图形用户界面中,可以使用lambda来定义回调函数。
附代码:
#内部函数
def knight(saying):
def inner(quote):
return "hi:'%s'" % quote
return inner(saying)
print(knight('dog'))
'''
hi:'dog'
'''
#闭包1
def knight(saying):
def inner():
return "hi:'%s'" % saying
return inner
a = knight('duck')
b = knight('dog')
print(a)
print(b)
print(a())
print(b())
'''
.inner at 0x01CC08E8>
.inner at 0x0222B6F0> hi:'duck'
hi:'dog'
'''
#闭包2
def out(x):
def inn(y):
return x+y
return inn
f = out(5)
print(f(20))
print(f(60))
'''
25
65
'''
# lambda匿名函数
def edit(words,func):
for word in words:
print(func(word))
animals = ['dog','sheep','tiger']
# 不使用lambda,使用普通函数定义小的函数
def enliven(word):
return word.capitalize() + '!'
print(edit(animals,enliven))
# 使用lambda定义小的函数
print(edit(animals,lambda word:word.capitalize() + '!'))
'''
两种方式的print效果相同:
Dog!
Sheep!
Tiger!
None
'''
-End-
閱讀更多 小智雅匯 的文章