zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    面向对象、构造函数的区别
    写一个function,清除字符串前后的空格。(兼容所有浏览器)
    两个DIV高度自适应方法(左右两个DIV高度一样)
    js数组去重
    input框处理删除小图标的功能
    查找显示高亮
    JSON.parse()和JSON.stringify()
    jquery封装
    怎么理解HTML语义化
    html5语义化标签
  • 原文地址:https://www.cnblogs.com/ryomahan/p/7561108.html
Copyright © 2011-2022 走看看