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)
    
  • 相关阅读:
    Codeforces Gym100502H:Clock Pictures(KMP算法)
    SPOJ MINSUB
    POJ 2796:Feel Good(单调栈)
    搭建(WSTMart)php电商环境时缺少fileinfo函数
    TP微信扫码支付
    tp3.2 支付宝app支付
    tp3.2 支付宝手机网站支付
    Thinkphp3.2+PHPQRCode 二维码生成示例
    百度UEditor粘贴或插入的表格不显示边框的解决办法
    PHP:导出数据到word(包含图片)
  • 原文地址:https://www.cnblogs.com/ryomahan/p/7561108.html
Copyright © 2011-2022 走看看