1. 程式人生 > 實用技巧 >python閉包函式

python閉包函式

閉包函式

閉包函式:定義在函式內部的函式,並且該函式包含對外部函式作用域中名字的引用,該函式就稱為閉包函式。

注意:該函式的作用域在定義階段就定義死了,與呼叫位置無關

閉包函式是 函式巢狀、函式物件、名稱空間與作用域 結合體。

函式作用域:

build_in :系統固定模組裡的變數 global:全域性變數,模組級別定義的變數 enclosing 巢狀的父級函式的區域性作用域,即包含此函式的上級函式 的區域性作用域,但不是全域性的 local :區域性作用域,及函式中定義的變數 優先順序:l e g b 從內往外
#爬蟲:模擬訪問百度

import requests

def get(url):

    response = requests.get(url)
    if response.status_code == 200:
        print(response.text)

get('https://www.baidu.com/')
get('https://www.baidu.com/')
get('https://www.baidu.com/')  #問題:每次訪問百度,都要呼叫一次,填一次地址




# 解決辦法:用閉包函式
def outter():
    url = 'https://www.baidu.com/'   #問題:把地址定死了,
    def get():
        response = requests.get(url)
        if response.status_code == 200:
            print(response.text)
    return get
baidu = outter()   #baidu --->get
baidu()


# 改進:
def outter(url):          #裝飾器這裡是傳遞的函式名
    def get():       #這裡接收的是函式引數   
        response = requests.get(url)
        if response.status_code == 200:
            print(response.text)
    return get
baidu = outter('https://www.baidu.com/')   #baidu --->get
taobao = outter('https://www.taobao.com/')    #taobao --->get
baidu()  #專門調百度
taobao()  #專門調淘寶