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
posted @ 2019-08-12 16:44  豆瓣酱瓣豆  阅读(326)  评论(0编辑  收藏  举报