会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132415个问题
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 7171楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 7172楼
大数据全系列/第一阶段:Linux 操作系统/Linux操作系统概述与安装 7173楼
Python 全系列/第二十七阶段:Hadoop 分布式文件系统:HDFS(扩展)/Hadoop 分布式文件系统HDFS 7174楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Spring 7175楼
JAVA 全系列/第一阶段:JAVA 快速入门/控制语句、方法、递归算法 7177楼

'''
闭包的特殊功能:
    1.可以在不修改现有源码的前提下,增加新的功能
    日志功能(统计访问时间,访问功能写道日志文件中),权限验证(下载之前,验证当前用户是否为会员)

开闭原则:
    开放:开放功能
    关闭:修改源码
'''
import time
#定义一个记录日志的函数:将访问时间以及访问的函数名写入到文件中(log.txt)
def writelog(func):
    try:
        file = open('log.txt','a',encoding='utf-8')
        #写入相关数据信息(访问的函数名,访问的时间)
        file.write(func.__name__)
        file.write("\t")#制表符
        #写入访问时间
        file.write(time.asctime())
        file.write("\n")#换行符
    except Exception as e:
        print(e.args)
    finally:
        #关闭文件
        file.close()

#闭包
def funcout(func):
    def funcin():
        #新增功能
        writelog(func)
        func()
    return funcin

def func1():
    print("我是功能1")
def func2():
   print("我是功能2")

#闭包的调用
func1 = funcout(func1)
func2 = funcout(func2)

func1()
func2()

GIF 2021-3-7 15-43-06.gif

老师,我想请问一下原来的def func1()这个函数它怎么就是下面的func1 = funcout(func1)这两个func1为啥是同一个呢?下面这个不是上面闭包函数里面的参数嘛?

Python 全系列/第四阶段:函数式编程和核心特性/生成器和装饰器 7178楼
JAVA 全系列/第六阶段:项目管理与SSM框架/Mybatis 7181楼
JAVA 全系列/第十一阶段:消息中间件与高并发处理/RocketMQ 7182楼
Python 全系列/第一阶段:Python入门/Python入门(动画版) 7183楼
Python 全系列/第四阶段:函数式编程和核心特性/生成器和装饰器 7184楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 7185楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637