裝飾器,高階函式,巢狀函式

2021-08-07 01:28:30 字數 1537 閱讀 8263

裝飾器:本質是函式,(裝飾其他函式)就是為其他函式新增其他功能

原則:1.不能修改被裝飾函式的源**

2.不能修改被裝飾函式的呼叫方式

補充記憶體管理機制(函式即變數)

匿名函式沒有名字,定義之後馬上被銷毀,除非賦值給乙個變數

def text1():

print("text1")

text2()

def text2():

print("text2")

text1()

這個可以正常執行

def text3():

print("text3")

text4()

text3()

def text4():

print("text4")

這個會報錯(記住一點變數定義了即可用,若是沒有就不能用,函式也一樣,另外定義的函式體會當字串存在記憶體裡這就是為text1()可以執行)

什麼是高階函式(函式即變數)

a. 把函式名當作實參傳遞給另乙個函式(不修改函式源**,為其新增功能如下程式)

import time

def text():

time.sleep(3)

print("text")

def text2(func):

tstart=time.time()

func()

tstop=time.time()

print(tstop-tstart)

text2(text)

b.返回值中包含函式名(不修改函式的呼叫方式)

import time

def text1():

print('print in text1')

time.sleep(2)

def text2(text):

print(text)

print('print in text2')

return text

text2(text1)

print(text2(text1))

text1=text2(text1) //如果後面的text1加括號就是把返回值傳過去了

text1()

巢狀函式:就是函式內定義了另外的函式

高階函式+巢狀函式=裝飾器

下面是乙個簡單的裝飾器

import time

def timer(func):

def demo(*args,**kwargs):#這裡加*的意思是無論有沒有引數都可以使用這個裝飾器

tstart=time.time()

func(*args,**kwargs)//run text()

tstop=time.time()

print("this is the fuction run time %s"%(tstop-tstart))

return demo

@timer#text=timer(text)

def text():

time.sleep(3)

print('print in text')

text()

裝飾器 高階函式 閉包 函式巢狀

裝飾器 本質就是函式,作用是給其他函式新增新功能 1 不修改被修飾函式的源 2 不修改被修飾函式的呼叫方法 import time deftimmer func def args,kwargs start time time.time res func args,kwargs end time ti...

裝飾器2 高階函式 函式巢狀 閉包

高階函式定義 1.函式接受的引數是乙個函式名 2.函式的返回值是乙個函式名 3.滿足上訴條件任意乙個,都可稱之為高階函式 1 deftest 2print 你好啊 3 defhigh func func 4print 高階函式 5func 6high func test 7輸出 8高階函式 9 你好...

函式巢狀與裝飾器

應用場景,位置引數中代表將多個引數存入元祖,將關鍵字引數傳入字典 位置引數 位置形參 必須被傳值,一一對應 位置實參 按從左到右的順序與形參一一對應 關鍵字引數 按照key value形式指名道姓的為形參傳值,可以完全不按照順序 1.關鍵字實參必須在位置引數的後面 2.可以混用位置實參與關鍵字實參,...