• Python学习笔记(九)


    Python学习笔记(九):

    1. 装饰器(函数)
    2. 内置函数

    1. 装饰器

    1. 作用域

    2. 高阶函数

    3. 闭包

    • 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).
    def outer():
    	x = 10
    	def inner():	# 条件一:inner是内部函数
    		print(x)	# 条件二:外部环境的一个变量
    	return inner()	# 结论:内部函数inner就是一个闭包
    # 两种调用inner的方法
    outer()()
    f = outer()
    f()
    # 闭包=内部函数+定义函数时的环境
    

    4. 装饰器

    代码示例:

    import time
    
    def show_time(f):			# 装饰器函数
        def inner():			# 通过闭包实现的装饰器
            start = time.time()
            f()
            end = time.time()
            print(start - end)
        return inner
    
    @show_time
    def foo():			# 功能函数
        print("foo...")
        time.sleep(2)
    
    foo()
    

    图示:
    图示

    扩展:

    1. 功能函数加参数

    代码示例:

    def show_time(f):		# 装饰器函数
        def inner(*args):	# 通过闭包实现装饰
            start = time.time()
            f(*args)
            end = time.time()
            print("spend %s"%(end - start))
        return inner
    
    @show_time
    def add(*args):			# 功能函数
        sums = 0
        for i in args:
            sums += i
        print(sums)
        time.sleep(1)
    
    add(1,2,3,4,5)
    
    1. 装饰器函数加参数

    代码示例:

    def logger(flag=''):		# 给装饰器函数再嵌套一层函数并传参
        def show_time(f):		# 装饰器函数
            def inner(*args):	# 通过闭包实现装饰效果
                start = time.time()
                f(*args)
                end = time.time()
                print("spend %s"%(end - start))
                if flag == 'true':	# 通过闭包传入装饰器的参数
                    print("日志")
            return inner
        return show_time
    
    @logger('true')  # = @show_time
    def add(*args):
        sums = 0
        for i in args:
            sums += i
        print(sums)
        time.sleep(1)
    
    add(1,2,3,4,5)
    
    @logger()
    def bar():
        print("bar...")
        time.sleep(2)
    
  • 相关阅读:
    接口的显示实现和隐式实现
    Math.Round和四舍五入
    经典SQL语句大全(转)
    简明添加log4net到项目中
    NAnt学习笔记(3) Properties, Loggers & Listeners
    (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
    Pyramid中如何配置多种URL匹配同一个View
    《IT项目管理》读书笔记(4) —— 项目范围管理
    C#语法糖
    枚举类型转换成字符串
  • 原文地址:https://www.cnblogs.com/ryomahan/p/7561108.html
Copyright © 2020-2023  润新知