• Python学习————闭包函数


    一:大前提:

    闭包函数=名称空间与作用域+函数嵌套+函数对象
    核心点:名字的查找关系是以函数定义阶段为准

    二:什么是闭包函数

    "闭"函数指的该函数是内嵌函数
    "包"函数指的该函数包含对外层函数作用域名字的引用(不是对全局作用域)

    闭包函数:名称空间与作用域的应用+函数嵌套

    def f1():
        x = 33333333333333333333
        def f2():
            print(x)
        f2()
    
    x=11111
    def bar():
        x=444444
        f1()
    
    def foo():
        x=2222
        bar()
    
    foo()
    
    
    

    闭包函数:函数对象

    def f1():
        x = 33333333333333333333
        def f2():
            print('函数f2:',x)
        return f2
    
    f=f1()
    
    
    
    print(f)
    
    x=4444
    
    f()
    
    def foo():
        x=5555
        f()
    
    foo()
    

    三:为何要有闭包函数=》闭包函数的应用

    两种为函数体传参的方式
    方式一:直接把函数体需要的参数定义成形参

    def f2(x):
        print(x)
    
    f2(1)
    f2(2)
    f2(3)
    
    方式二:
    def f1(x): # x=3
        x=3
        def f2():
            print(x)
        return f2
    
    x=f1(3)
    print(x)
    
    x()
    
    
    
    import requests
    

    传参的方案一:

    def get(url):
        response=requests.get(url)
        print(len(response.text))
    
    get('https://www.baidu.com')
    get('https://www.cnblogs.com/linhaifeng')
    get('https://zhuanlan.zhihu.com/p/109056932')
    

    传参的方案二:

    def outter(url):
    
    url='https://www.baidu.com'
    
    ​    def get():
    ​        response=requests.get(url)
    ​        print(len(response.text))
    ​    return get
    
    baidu=outter('https://www.baidu.com')
    baidu()
    
    cnblogs=outter('https://www.cnblogs.com/linhaifeng')
    cnblogs()
    
    zhihu=outter('https://zhuanlan.zhihu.com/p/109056932')
    zhihu()
    
  • 相关阅读:
    架构师图谱
    P3398 仓鼠找sugar
    NOIP 2017小凯的疑惑
    P2568 GCD
    自动AC机
    qbxt国庆刷题班 游记&总结
    【学习笔记】manacher算法
    [ZROI]分组
    BSGS与扩展BSGS
    Crt and ExCrt
  • 原文地址:https://www.cnblogs.com/x945669/p/12534967.html
Copyright © 2020-2023  润新知