1. 程式人生 > >day-04

day-04

原來 現在 urlopen ron pre 應用領域 bsp 應用場景 dex

四 閉包函數

一 什麽是閉包?

內部函數包含對外部作用域而非全局作用域的引用

#提示:之前我們都是通過參數將外部的值傳給函數,閉包提供了另外一種思路,包起來嘍,包起呦,包起來哇

示例:

def outter():
    x=110
    def inner():
        print(x)
    return inner


f=outter() #這裏是把返回值賦值給f
f() #然後在用f調用函數

二 閉包的意義與應用

#閉包的意義:返回的函數對象,不僅僅是一個函數對象,在該函數外還包裹了一層作用域,這使得,該函數無論在何處調用,優先使用自己外層包裹的作用域
#應用領域:延遲計算(原來我們是傳參,現在我們是包起來)

from urllib.request import urlopen #加載爬蟲模塊
def index(url):
    def get():
        return urlopen(url).read()
    return get
baidu=index(http://www.baidu.com) #傳入函數參數
print(baidu().decode(utf-8))

五 裝飾器

裝飾器就是閉包函數的一種應用場景

開放封閉原則:對修改封閉,對擴展開放

二 什麽是裝飾器

裝飾器他人的器具,本身可以是任意可調用對象,被裝飾者也可以是任意可調用對象。
強調裝飾器的原則:1 不修改被裝飾對象的源代碼 2 不修改被裝飾對象的調用方式
裝飾器的目標:在遵循1和2的前提下,為被裝飾對象添加上新功能

day-04