• python 闭包函数


    闭包函数

    一、什么 是闭包

    闭包:闭是封闭(函数内部的函数),包是包含(该函数内部函数对外部作用域而非全局作用据的变量的应用)。

    闭包是指:函数内部对外部作用于而非全局作用域的引用。

    闭包函数: 传参的另外一种方式, 参数+函数包在一起返回出去

    def outter():
        x = 1
    
        def inter():
            print(x)
        return inter
    
    
    f = outter()
    
    
    def f2():
        x = 2
        f()
    
    
    f2()
    
    #输出:
    1
    
    1. 俩种为函数传参的方式

      1. 为函数传参的方式一:使用参数的形式

        def func(x):
            print(x)
        
        
        func(1)
        func(2)
        func(3)
        
        #输出:
        1
        2
        3
        
      2. 为函数传参的方式二:包给函数

        def outter(x):
            x = 1
        
            def inner():
                print(x)
        
            return inner
        
        
        f = outter(1)
        f()
        # 查看闭包的元素
        print(f.__closure__[0].cell_contents)
        
        #输出:
        1
        1
        1
        

    二、闭包函数的应用

    闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,有限使用自己外层包裹的作用域。

    应用领域:延迟计算(原来是传参,现在是包起来),爬虫领域。

    import requests
    def get(url):
        response = requests.get(url)
        print(url)
    get('https://www.baidu.com')
    get('https://www.baidu.com')
    get('https://www.baidu.com')
    
    # 输出:
    https://www.baidu.com
    https://www.baidu.com
    https://www.baidu.com
    

    上面的方式比较复杂,如果用默认参数解决网站,可以考虑用闭包的方式。

    import requests
    
    
    def outter(url):
        def get():
            response = requests.get(url)
            print(url)
    
        return get
    
    
    baidu = outter('http://www.baidu.com')
    
    baidu()
    baidu()
    baidu()
    
    #输出:
    http://www.baidu.com
    http://www.baidu.com
    http://www.baidu.com
    
  • 相关阅读:
    位运算与变量多状态表达
    判断点是否在多边形内
    向量旋转
    小怪受击身体变红特效代码
    字典 Key值转换为数组
    Android中的Selector的使用总结
    Android 常见的工具类
    成为Android高手必须掌握的8项基本要求
    K-means算法
    Android 5.0以上获取系统运行进程信息
  • 原文地址:https://www.cnblogs.com/SkyOceanchen/p/11341047.html
Copyright © 2020-2023  润新知