zoukankan      html  css  js  c++  java
  • 闭包函数

    闭包函数

    1 闭包函数的定义

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

    闭包函数=名称空间与作用域+函数嵌套+函数对象

    闭包函数的核心:名字的查找关系是以函数定义阶段为准

    def f1():
        x = 333				# 对外层函数作用域名字的引用
        def f2():			# 函数的嵌套定义
            print(x)		# 对外层函数作用域名字的引用
        f2()
    
    def f1():				# 闭包函数f1
        x = 333				# 对外层函数作用域名字的引用
        def f2():			# 函数的嵌套定义
            print(x)		# 对外层函数作用域名字的引用
        f2()
    x=111
    
    
    def bar():
        x=444
        f1()
    
    def foo():
        x=222
        bar()
    
    foo()
    # 结果为333,无论闭包函数在何处被调用,都使用闭包内的变量
    
    def f1():
        x = 333
        def f2():
            print('函数f2:',x)
        return f2
    
    f=f1()
    print(f)
    # <function f1.<locals>.f2 at 0x0000021C568E6820>
    
    x=4444
    f()
    # 函数f2: 333
    
    def foo():
        x=5555
        f()
    foo()
    # 函数f2: 333
    

    2 闭包函数的应用

    闭包函数可以用来为函数传值

    2.1 为函数体传参的方式

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

    def f2(x):
        print(x)
    
    f2(1)	#每调用一次要输入一次参数
    f2(2)
    f2(3)
    

    方式二:通过闭包传值

    def f1(x): # x=3
        def f2():
            print(x)
        return f2
    
    x=f1(3)
    print(x)
    
    x()
    x()		# 可以将值锁在包里
    

    2.2 为函数体传参的方式实例

    方案一:

    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')
    

    方案二:

    import requests
    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()
    
    

    1

  • 相关阅读:
    [BUUCTF]PWN3——warmup_csaw_2016
    分页
    关系与外键约束
    连接查询
    自关联
    子查询
    视图
    事务
    索引
    绘图笔记
  • 原文地址:https://www.cnblogs.com/achai222/p/12534901.html
Copyright © 2011-2022 走看看