python 閉包函數

閉包函數

1、什麼 是閉包

閉包:閉是封閉(函數內部的函數),包是包含(該函數內部函數對外部做用域而非全局做用據的變量的應用)。閉包

閉包是指:函數內部對外部做用於而非全局做用域的引用。函數

閉包函數: 傳參的另一種方式, 參數+函數包在一塊兒返回出去網站

def outter():
    x = 1

    def inter():
        print(x)
    return inter


f = outter()


def f2():
    x = 2
    f()


f2()

#輸出:
1
  1. 倆種爲函數傳參的方式url

    1. 爲函數傳參的方式一:使用參數的形式code

      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

2、閉包函數的應用

閉包的意義:返回的函數對象,不單單是一個函數對象,在該函數外還包裹了一層做用域,這使得,該函數不管在何處調用,有限使用本身外層包裹的做用域。作用域

應用領域:延遲計算(原來是傳參,如今是包起來),爬蟲領域。get

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

上面的方式比較複雜,若是用默認參數解決網站,能夠考慮用閉包的方式。requests

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
相關文章
相關標籤/搜索