python如何建立函式 python函式 生成器

2021-10-11 12:31:15 字數 1695 閱讀 5632

1.理論知識:什麼是生成器?

生成器的本質就是迭代器。生成器和迭代器也有不同,唯一的不同就是:迭代器都是python給你提供的已經寫好的工具或者通過資料轉化得來的,(比如檔案控制代碼,iter([1,2,3])。生成器是需要我們自己用python**構建的工具。最大的區別也就如此了。

2.生成器的構建方式?

在python中有三種方式來建立生成器:

1. 通過生成器函式

2. 通過生成器推導式

3. python內建函式或者模組提供(其實1,3兩種本質上差不多,都是通過函式的形式生成,只不過1是自己寫的生成器函式,3是python提供的生成器函式而已)

2.1)通過生成器函式構建生成器

#普通函式

deffunc():print(11)return 22ret=func()print(ret)#將函式中return換成yield,這樣func就不是函式了。而是乙個生成器函式

deffunc():print(11)yield 22ret=func()print(ret)

執行結果:

#普通函式執行結果

#生成器函式執行結果

由於函式中存在yield,那麼這個函式就是乙個生成器函式.在執行這個函式的時候.就不再是函式的執行了.而是獲取這個生成器物件

2.2)生成器函式如何取值

生成器的本質就是迭代器.迭代器如何取值,生成器就如何取值。所以我們可以直接執行next()來執行以下生成器

deffunc():print(『111『)yield 222

genner=func()# 這個時候函式不會執?. ?是獲取到?成器

ret=genner.__next__()print(ret)# 這個時候函式才會執?

執行結果:111

deffunc():print("111")yield 222

print("333")yield 444gener=func()

ret= gener.__next__()print(ret)

ret2= gener.__next__()print(ret2)#ret3 = gener.__next__()#最後?個yield執?完畢. 再次__next__()程式報錯#print(ret3)

執行結果:111

444process finished with exit code 0

當程式執行完最後乙個yield,那麼後面繼續執行next()程式會報錯,乙個yield對應乙個next,next超過yield數量,就會報錯,與迭代器一樣。

yield與return的區別:

return一般在函式中只設定乙個,他的作用是終止函式,並且給函式的執行者返回值。

yield在生成器函式中可設定多個,他並不會終止函式,next會獲取對應yield生成的元素。

#return

defeat():

lst=for i in range(1,10000):

e=eat()print(e)

#yielddefeat():for i in range(1,10000):yield 『包子『+str(i)

e=eat()for i in range(200):

a=next(e)print(a)for i in range(300):

b=next(e)print(b)

執行結果:

return生成列表

yield生成的是值,而且還可以保留上次的位置。暫用空間更小

python建立目錄函式 如何測試建立目錄的函式?

這裡的乙個好實踐是學習如何使用mock或這樣的測試框架 此外,您應該使用python的unittest框架。在 你在這裡的目標不一定要確保某個東西被創造出來,而是要讓它被呼叫。因此,您需要做的是模擬外部呼叫,以幫助測試方法的正確流。所以在這種情況下,你應該模仿exists和makedirs。然後確保...

使用virtualenv建立獨立的Python環境

virtualenv是 python的沙盒環境,主要解決以下問題 yum groupinstall development tools yum y install zlib devel bzip2 devel openssl devel ncurses devel sqlite devel read...

怎樣學好python 零基礎如何學好Python?

零基礎如何學好python?其實零基礎學好python很簡單,python高階需要花費寫氣力,都說python簡單易學,那麼零基礎如何學好python?有哪些必須學的知識?學習的策略技巧有哪些?看傳智播客怎麼說 python上手很容易,基本有其他語言程式設計經驗的人可以在1週內學會python最基本...