博客列表 >python的闭包与装饰器语法糖

python的闭包与装饰器语法糖

CC
CC原创
2021年01月06日 21:40:38602浏览

Python闭包

为什么要有闭包

  1. #内部函数对外部函数作用域里变量的引用
  2. def func():#外部函数
  3. print("this is func")
  4. def func1():#内部函数
  5. print("this is func1")
  6. func()#运行外部函数,内部函数就被创建了
  7. func1()#创建过程在func函数的执行过程中

闭包解释

  1. def func():
  2. # 函数内的属性,都是有生命周期
  3. print('this is func')
  4. def func1():
  5. print('this is func1')
  6. # 虽然死掉了,但是可以用return返回生命print('this is func1')
  7. return func1
  8. closure=func()
  9. closure()

闭包是什么
内部函数完成了对数据的封装,类似于面向对象

  1. def func():#外部函数
  2. a = 1#外部函数作用域里的变量
  3. print('this is func')
  4. def func1(num):#内部函数
  5. print('this is func1')
  6. print (num +a)
  7. return func1
  8. closure=func()
  9. closure(3)

闭包怎么用

  1. mylist = [1,2,3,4,5]
  2. def func(obj):
  3. print('func:',obj)
  4. def func1():
  5. obj[0] +=1
  6. print('func1:',obj)
  7. return func1
  8. closure=func(mylist)
  9. closure()
  10. closure()
  11. closure()

闭包定义

定义:在函数嵌套的前提下,内部函数使用外部函数的变量,并且外部函数返回了内部函数,那么我们]把内部函数称为闭包。

  • 构成条件:
    1.函数嵌套前提
    2.内部函数使用外部函数变量
    3.外部函数返回内部函数
  • 注意点:消耗内存
  • 作用:闭包可以保存外部函数的变量,不会随着外部函数调用完销毁
    1. # 外部函数
    2. def func_out(num1):
    3. # 定义内部函数
    4. def func1_inner(num2):
    5. # 内部函数中使用外部函数的变量
    6. result = num1+num2
    7. print('sum:',result)
    8. # 返回的内部函数,就是闭包
    9. return func1_inner
    10. f=func_out(1) #指向func1_inner
    11. # 执行闭包
    12. f(2)

    装饰器定义

  • 定义:在已有函数增加额外功能的函数
  • 装饰器特点:
    1.不修改已有函数的源代码
    2.不修改已有函数的调用方式
    3.给已有函数增加额外功能
    1. def check(f):
    2. def inner():
    3. print('please log in')
    4. f()
    5. # 返回的是函数名,是闭包函数
    6. return inner
    7. def comment():
    8. print('add a comment')
    9. # 使用装饰器来装饰函数
    10. comment = check(comment)
    11. comment()
  • 装饰器使用语法糖

    1. def check(f):
    2. def inner():
    3. print('please log in')
    4. f()
    5. # 返回的是函数名,是闭包函数
    6. return inner
    7. # @装饰器函数的名字
    8. @check # comment = check(comment)
    9. def comment():
    10. print('add a comment')
    11. # 函数装饰器名字
    12. # comment = check(comment)
    13. # comment()
    14. comment()
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议