python 的嵌套&匿名&高阶函数&闭包

1.嵌套函数

name = "nis"
def change():
    name = "nis,learn python"
    def change2():
        # global name
        name = "nis,cool"
        print("打印第二层",name)
    change2()
    print("第二层打印",name)
change()
print("最外层",name)

输出

打印第二层 nis,cool
第二层打印 nis,learn python
最外层 nis

#每个函数里的变量是互相独立的,变量的查找顺序也是从当前层依次往上层找。

2. 匿名函数

不显示指定的函数名

def calc(x,y):
    return x**y
print(calc(3,5))
calc= lambda x,y:x**y
print(calc(3,5))

搭配其他函数

res = map(lambda x:x**2,[1,3,7,3,6])
for i in res:
    print(i)

3.高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

def get_abs(n):
    if n < 0:
        n = int(str(n).strip("-"))
    return n

def add(x,y,f):
    return f(x) + f(y)

res = add(3,-6,get_abs)
print(res)

高阶函数条件:

接受一个或多个函数作为输入

return 返回另外一个函数

4.闭包

函数定义和函数表达式位于另一个函数整体内(嵌套函数)。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量,函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说内部函数会再外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量,参数以及其他内部函数,这些局部变量,参数和函数声明(最初时)的值是外部函数返回时的值,但也会收到内部函数的影响

def outer():
    name = 'alex'
    def inner():
        print("在inner里打印外层函数的变量",name)
    return inner # 注意这里只是返回inner的内存地址,并未执行
f = outer() # .inner at 0x1027621e0> 
f()  # 相当于执行的是inner()

注意此时outer已经执行完毕,正常情况下outer里的内存都已经释放了,但此时由于闭包的存在,我们却还可以调用inner,并且inner内部还调用了上一层outer里的name变量。这种黏黏糊糊的现象就是闭包。

闭包意义

返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处条用,优先使用自己外层函数包裹的作用域

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值