Python|内部函数、闭包、lambda匿名函数

1 内部函数

Python可以在函数中定义另外一个函数。

当需要在函数内部多次执行复杂任务时,内部函数非常有用。

Python|内部函数、闭包、lambda匿名函数

2 闭包

若调用某函数时,该函数将其内部定义的函数作为返回值,则所返回的函数称为闭包(closure)。或者说,如果在一个内部函数里,对在外部作用域(非全局变量)进行引用,这个内部函数就是闭包。

闭包是将函数的语句和执行环境打包在一起得到的对象,当执行嵌套函数时,闭包将获取内部函数所需的整个环境,嵌套函数可以使用外层函数中的变量而不需要通过参数引用。

内部函数直接使用外部函数的参数,外部函数直接返回内部函数(相当于内部函数的复制),而不是调用它。所以内部函数形成一个闭包:一个被动态创建的可以记录外部变量的函数。

Python|内部函数、闭包、lambda匿名函数

当闭包执行完成后,仍能够保持当前的运行环境,并且可以根据外部作用域的变量得到不同的结果。

Python|内部函数、闭包、lambda匿名函数

3 匿名函数:lambda()函数

Python中,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-


分享到:


相關文章: