日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归函数、生成器、装饰器

發(fā)布時(shí)間:2025/4/16 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归函数、生成器、装饰器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

遞歸函數(shù)、生成器、裝飾器

遞歸: ?在函數(shù)執(zhí)行中調(diào)用自身

  • 必須有邊界條件,遞歸前進(jìn)段和遞歸返回段

  • python中遞歸有層次限制

遞歸函數(shù)實(shí)現(xiàn)階乘

def?fact(n):?if?n?<=?1:return?1else:return?n?*?fact(n-1)

調(diào)用:fact(3)=3fact(2)=32fact(1)=32*1

fact(3)6

實(shí)現(xiàn)斐波拉契數(shù)列

def?fib1(n):if?n?<=?1:return?1else:return(fib1(n-1)+fib1(n-2))for?i?in?range(10):print(fib1(i))1 1 2 3 5 8 13 21 34 55

生成器

  • 普通函數(shù)遇到return返回函數(shù)結(jié)束,再次執(zhí)行又從第一條語句開始

  • 生成器遇到y(tǒng)ield返回函數(shù)被掛起,再次執(zhí)行則從上一次返回yield語句的地方繼續(xù)執(zhí)行

定義一個(gè)生成器函數(shù)

def?gen():print('step?1')yield?1print('step?2')yield?2print('step?3')yield?3a=gen()next(a)step?11next(a)step?22

裝飾器:在不改變已存在對(duì)象的基礎(chǔ)上為其添加額外功能

  • 典型應(yīng)用:插入日志、測(cè)試性能、事物處理

給foo函數(shù)計(jì)算運(yùn)行時(shí)間

import?timedef?foo():print('in?foo()')#?定義一個(gè)計(jì)時(shí)器,傳入一個(gè)函數(shù),并返回另一個(gè)附加了計(jì)時(shí)功能的方法def?timeit(func):#?定義一個(gè)內(nèi)嵌的包裝函數(shù),給傳入的函數(shù)加上計(jì)時(shí)功能的包裝def?wrapper():start?=?time.clock()func()end?=time.clock()print('used:',?end?-?start)#?將包裝后的函數(shù)返回return?wrapperfoo?=?timeit(foo)foo()in?foo() used:?0.0018359999999972842

python裝飾器提供的語法糖效果,下面的@timeit跟上面的foo = timeit(foo)是完全等價(jià)的

import?timedef?timeit(func):#?定義一個(gè)內(nèi)嵌的包裝函數(shù),給傳入的函數(shù)加上計(jì)時(shí)功能的包裝def?wrapper():start?=?time.clock()func()end?=time.clock()print('used:',?end?-?start)#?將包裝后的函數(shù)返回return?wrapper@timeitdef?foo():print('in?foo()')foo()in?foo() used:?0.0013369999999994775


轉(zhuǎn)載于:https://blog.51cto.com/mofeihu/1877144

總結(jié)

以上是生活随笔為你收集整理的递归函数、生成器、装饰器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。