第二十八篇 闭包函数

第二十八篇 闭包函数

一、回顾

  • 1.函数对象:可以将定义在函数内的函数返回到全局使用,从而打破函数的层级限制
  • 2.名称空间与作用域:作用域关系在函数定义阶段时就已经固定死了,与调用位置无关,也即是在任意位置调用函数都需要找到函数定义阶段时的作用域关系
a = 2
def f():
    def f1():
        print(a)
    return f1
x = f()
def f2():
    a = 6
    x()
f2()   # 2
​```当程序执行到f1()中时,函数f1()查找变量的顺序是local ----> enclose(封装)---->global---->built in(内置),最终找到 a = 2。由于 a = 6 属于f2()函数中的局部变量,所以它永远也影响不了f()函数中的f1()函数
  • 3.两种为函数传值的方式

    • 1.使用参数直接传给目标函数
    def f(x):
        print(x)
    f(1)   # 1
    • 2.通过外层函数“包”给内层函数
    def f(x)
        def f1():
            print(x)
        return f1
    a = f(1)    
    a()   # 1

二、什么是闭包

  • 1.闭包指的是:函数内部函数对外部作用域而非全局作用域的引用
  • 2.简单来说,闭包的概念就是当我们在函数内定义一个函数时,这个内部函数使用了外部函数的临时变量,且外部函数的返回值是内部函数的引用

三、闭包函数的应用

  • 1.闭包的意义:返回的内层函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得该函数无论在何处调用,优先使用自己外层包裹的作用域。(也就是当需要去外层查找变量时优先查找包裹自己的函数内的变量)

  • 2.应用领域:延迟计算(以前需要传参,现在可以把目标函数包在我们设计的函数中)、爬虫

import requests

# 以前每爬一次都需要输入一次网址
def get(url):
    response = requests.get(url)
    data = reponse.text
    print(data)
get('https://www.baidu.com')
get('https://www.baidu.com')

# 利用闭包函数则只需要输入一次,下次爬时只需要调用函数即可
def outer(url):
    def get1():
        response = requests.get(url)
        data1 = reponse.text
        print(data)
    return get1
result = outer('https://www.baidu.com')
result()
result()    

转载于:https://www.cnblogs.com/itboy-newking/p/10958979.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值