博主信息
博文 29
粉丝 0
评论 0
访问量 24394
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
python的闭包与装饰器语法糖
CC
原创
836人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学