python基礎之閉包函式與裝飾器

2022-08-05 14:39:14 字數 1011 閱讀 8602

閉包函式:

什麼是閉包函式:

閉指的是定義在乙個函式內部

包指的是該函式包含對外部作用域(非全域性作用域)名字的引用

def counter():

n=0def incr():

nonlocal n

x=nn+=1

return x

return incr

c=counter()

print(c())

閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域
裝飾器

1.什麼是裝飾器

就目前來看:裝飾器就是定義乙個函式,只不過該函式的功能是用來為其它函式新增額外的功能的

其實:裝飾器本身其實可以是任意可呼叫的物件,

被裝飾的物件也可以是任意可呼叫的物件。

2.為什麼要用裝飾器

軟體維護應該遵循開發封閉原則:

開放封閉原則指的是:

①軟體一旦上線執行後對修改源**是封閉的

②對擴充套件功能是開放的

這就用到了裝飾器

裝飾器的實現必須遵守兩大原則:

①不可修改被裝飾物件的源**

②不可修改被裝飾物件的呼叫方式

import time

def timmer(func):

start_time=time.time()

res=func(*args,**kwargs)

stop_time=time.time()

print('run time is %s' %(stop_time-start_time))

return res

@timmer

def foo():

time.sleep(3)

print('from foo')

foo()

其實@代表語法糖

@timmer 表示foo = timmer(foo)

python基礎 閉包函式

內包函式定義 內部函式包含對外部作用域而非全劇作用域名字的引用,該內部函式稱為閉包函式 函式內部定義的函式稱為內部函式 一 建立乙個閉包 使用外層函式的變數也是閉包 使用外層函式的形參也是閉包 def outter 本質就是 記憶體空間 name zs def inner print name 引用...

python基礎 lambda 冒泡 閉包和裝飾

python使用lambda建立匿名函式 foo 18,9,22,17,24,8,12,27 print list filter lambda x x 3 0,foo print list map lambda x x 2 10,foo import functools,functools def ...

python之函式,閉包

引數 收集引數 引數名 def stu info print info 0 print info 1 print len info print type info stu shanxi 200008966 19 列印結果 shanxi 200008966 3 class tuple 返回值 def ...