python教程之生成器和匿名函數(shù)
生成器
01 什么是生成器?
記住兩個關(guān)鍵:
- **生成器是一種特殊的函數(shù)方法。**意味著它和函數(shù)(def)密不可分。
- 基于上一點,只要函數(shù)中出現(xiàn)yield關(guān)鍵字,就是生成器函數(shù)。
初學(xué)的你,還是太難理解?
02 通俗的講解
你可以將生成器理解為一個盒子,你可以向這個盒子里隨意添加元素,當(dāng)你需要的時候,再取出來用。
請看下面的例子:
# 普通函數(shù)
def func():
return 1
f = func()
print("函數(shù)返回值:",f)
->函數(shù)返回值:1
print("函數(shù)返回值的類型:",type(f))
->函數(shù)返回值的類型:<class 'int'>
# 生成器
def gen\_func():
yield 1
yield 2
g = gen_func()
print("生成器對象:",g)
->生成器對象:object gen\_func at 0x00000189B8CFF7C8>
print("生成器對象的類型:",type(g))
->生成器對象的類型:<class 'generator'>
# 讀取生成器對象的值,因為生成器也是一個迭代器,實現(xiàn)了python的迭代協(xié)議(即實現(xiàn)了\_\_iter\_\_方法)
for i in g:
print("生成器對象的值:",i)
->生成器對象的值: 1
->生成器對象的值: 2
03 生成器到底有什么用?
作用:惰性求值(一邊循環(huán)一邊計算的機制),節(jié)省性能
04 生成器的常見用途?
- 讀大文件
- 網(wǎng)絡(luò)爬蟲 scrapy 框架
- 協(xié)程
舉個例子:斐波那契數(shù)列(0,1,1,2,3,5…),打印斐波那契數(shù)列前50個元素
# 不使用生成器,會消耗大量內(nèi)存
def fib(idx):
res=[]
n, a, b = 0, 0, 1
while n < idx:
res.append(b)
a, b = b, a+b
n += 1
return res
res = fib(100)
print(res)
# 使用生成器,可節(jié)約大量內(nèi)存
def gen\_fib(idx):
n, a, b = 0, 0, 1
while n < idx:
yield b
a, b = b, a+b
n += 1
for i in gen_fib(100):
print(i)
匿名函數(shù)
01 什么是匿名函數(shù)?
當(dāng):
- 函數(shù)實現(xiàn)比較簡單
- 函數(shù)不需要被多個地方調(diào)用
- 懶得給這個函數(shù)起名字時,我們可以使用匿名函數(shù)。
初學(xué)的你,還是太難理解?
02 通俗的講解
你想實現(xiàn)一個求x的平方的函數(shù),但是這個函數(shù)太簡單,不值得專門def定義,同時,你忘記了平方的英文如何拼寫,要是命名成 “pingfang”,又顯得自己太low,于是乎,你可以不給這個函數(shù)起名字,還能實現(xiàn)它。這就是匿名函數(shù)lambda表達(dá)式。
比如:求一個數(shù)的平方
# 不用 lambda 表達(dá)式
def square(x):
return x * x
print(square(2))
# 使用 lambda 表達(dá)式
# 寫法:lambda 返回值:計算表達(dá)式
s = lambda x: x * x
print(s(2))
總結(jié)
1 如果你是初學(xué)者,可以先不掌握生成器和匿名函數(shù),待學(xué)成python后,再行琢磨;
2 在實際工作中,生成器和匿名函數(shù)的使用頻次,相對較高,并且在面試中是高頻問點。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python GUI庫圖形界面開發(fā)之PyQt5瀏覽器控件QWebEngineView詳細(xì)使用方法
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5瀏覽器控件QWebEngineView詳細(xì)使用方法,需要的朋友可以參考下2020-02-02
Python實現(xiàn)中文文本關(guān)鍵詞抽取的三種方法
文本關(guān)鍵詞抽取,是對文本信息進(jìn)行高度凝練的一種有效手段,通過3-5個詞語準(zhǔn)確概括文本的主題,幫助讀者快速理解文本信息,本文分別采用TF-IDF方法、TextRank方法和Word2Vec詞聚類方法,利用Python語言進(jìn)行開發(fā),實現(xiàn)文本關(guān)鍵詞的抽取,需要的朋友可以參考下2024-01-01
Python中pandas庫sort_values()方法的使用
最后去看了有關(guān)于 sort_values 的文檔,成功解決先把單詞出現(xiàn)頻次由高往低依次排序,再把頻次相同的情況下的單詞按照 MD5 值排序這個問題,下面通過本文講解下Python中pandas庫sort_values()方法的使用,感興趣的朋友一起看看吧2023-07-07
tensorflow實現(xiàn)將ckpt轉(zhuǎn)pb文件的方法
這篇文章主要介紹了tensorflow實現(xiàn)將ckpt轉(zhuǎn)pb文件的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04

