目錄
用yield 創建簡單的數值序列
yield 實現無限序列生成器
yield 處理大數據或文件讀取
幾個小貼士:yield 使用中容易忽略的地方
首頁 後端開發 Python教學 用Python生成序列產生關鍵字

用Python生成序列產生關鍵字

Jul 16, 2025 am 04:50 AM
php java 程式設計

yield 關鍵字用於創建生成器,按需產生值,節省內存。 1. 替代return 生成有限序列,如斐波那契數列;2. 實現無限序列,如自然數列;3. 處理大數據或文件讀取,逐行處理避免內存溢出;4. 注意生成器只能遍歷一次,可用next() 或for 循環調用。

Generating sequences with Python yield keyword

如果你想知道怎麼用Python 的yield關鍵字來生成序列,其實它最大的作用就是幫你創建一個生成器(generator) ,在需要的時候按需產生值,而不是一次性把所有數據都存進內存。

Generating sequences with Python yield keyword

這在處理大量數據或者無限序列時特別有用。

下面我們就來看看幾種常見的使用場景和寫法。

Generating sequences with Python yield keyword

用yield 創建簡單的數值序列

最常見的一種方式是替代return來返回一個序列。不同的是,函數遇到yield會暫停執行,並保留當前狀態,等下一次調用再繼續執行。

比如你想寫一個生成斐波那契數列的函數:

Generating sequences with Python yield keyword
 def fib_sequence(n):
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, ab

這樣你就可以像這樣一步步取值:

 for num in fib_sequence(100):
    print(num)

這種方式比先生成一個完整列表更節省內存,尤其是當你只需要遍歷一遍的時候。


yield 實現無限序列生成器

有時候你可能想生成一個“無限”的序列,比如從1 開始一直加1 的自然數列。這種情況下如果用普通列表肯定不行,但用yield就很輕鬆。

舉個例子:

 def infinite_numbers():
    num = 1
    while True:
        yield num
        num = 1

你可以這樣取前幾個數:

 counter = infinite_numbers()
print(next(counter)) # 1
print(next(counter)) # 2

當然實際使用時要注意控制循環次數,不然會進入死循環。


yield 處理大數據或文件讀取

除了數學序列, yield在處理大文件或者數據流時也很實用。比如讀取一個幾GB 的日誌文件,如果一次性加載到內存裡顯然不合適,這時可以用生成器一行行讀取。

示例:

 def read_large_file(file_path):
    with open(file_path, &#39;r&#39;) as f:
        for line in f:
            yield line.strip()

這樣你每次只讀取一行,不會佔用太多資源:

 for log_line in read_large_file(&#39;huge_log.txt&#39;):
    process(log_line) # 假設這是你的處理邏輯

這個方法在做數據分析、ETL 或者日誌處理時非常實用。


幾個小貼士:yield 使用中容易忽略的地方

  • yield 函數返回的是生成器對象,不是直接結果,需要用next()或者for循環去觸發。
  • 生成器只能被遍歷一次,再次使用得重新調用函數創建新對象。
  • 如果你想從生成器拿到全部結果,可以把它轉成列表: list(my_generator())
  • yield 可以配合send() 方法實現雙向通信,但這屬於高級用法,一般不常用。

基本上就這些了。用好yield ,可以讓你的代碼更高效、更優雅,尤其是在處理序列、流式數據或大型數據集的時候。

以上是用Python生成序列產生關鍵字的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

Rimworld Odyssey如何釣魚
1 個月前 By Jack chen
Kimi K2:最強大的開源代理模型
1 個月前 By Jack chen
我可以有兩個支付帳戶嗎?
1 個月前 By 下次还敢

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1602
29
PHP教程
1506
276
Edge PDF查看器不起作用 Edge PDF查看器不起作用 Aug 07, 2025 pm 04:36 PM

testthepdfinanotherapptoderineiftheissueiswiththefileoredge.2.enablethebuilt inpdfviewerbyTurningOff“ eflblyopenpenpenpenpenpdffilesexternally”和“ downloadpdffiles” inedgesettings.3.clearbrowsingdatainclorwearbrowsingdataincludingcookiesandcachedcachedfileresteroresoreloresorelorsolesoresolesoresolvereresoreorsolvereresoreolversorelesoresolvererverenn

用Docker將Java應用程序部署到Kubernetes 用Docker將Java應用程序部署到Kubernetes Aug 08, 2025 pm 02:45 PM

容器化Java應用:創建Dockerfile,使用基礎鏡像如eclipse-temurin:17-jre-alpine,複製JAR文件並定義啟動命令,通過dockerbuild構建鏡像並用dockerrun測試本地運行。 2.推送鏡像到容器註冊表:使用dockertag標記鏡像並推送到DockerHub等註冊表,需先登錄dockerlogin。 3.部署到Kubernetes:編寫deployment.yaml定義Deployment,設置副本數、容器鏡像和資源限制,編寫service.yaml創建

如何在Java中實現簡單的TCP客戶端? 如何在Java中實現簡單的TCP客戶端? Aug 08, 2025 pm 03:56 PM

Importjava.ioandjava.net.SocketforI/Oandsocketcommunication.2.CreateaSocketobjecttoconnecttotheserverusinghostnameandport.3.UsePrintWritertosenddataviaoutputstreamandBufferedReadertoreadserverresponsesfrominputstream.4.Usetry-with-resourcestoautomati

VS代碼快捷方式專注於Explorer面板 VS代碼快捷方式專注於Explorer面板 Aug 08, 2025 am 04:00 AM

VSCode中可通過快捷鍵快速切換面板與編輯區。要跳轉至左側資源管理器面板,使用Ctrl Shift E(Windows/Linux)或Cmd Shift E(Mac);返回編輯區可用Ctrl `或Esc或Ctrl 1~9。相比鼠標操作,鍵盤快捷鍵更高效且不打斷編碼節奏。其他技巧包括:Ctrl KCtrl E聚焦搜索框,F2重命名文件,Delete刪除文件,Enter打開文件,方向鍵展開/收起文件夾。

如何在Java執行準備好的聲明? 如何在Java執行準備好的聲明? Aug 06, 2025 pm 04:04 PM

加載JDBC驅動並建立數據庫連接;2.使用Connection.prepareStatement()創建含?佔位符的SQL語句;3.調用setString()、setInt()等方法從1開始設置參數值;4.根據SQL類型調用executeUpdate()、executeQuery()或execute()執行語句;5.使用try-with-resources自動關閉Connection、PreparedStatement和ResultSet資源,防止內存洩漏,確保安全高效地處理數據庫操作。

Java對象的序列化過程是什麼? Java對象的序列化過程是什麼? Aug 08, 2025 pm 04:03 PM

JavaserializationConvertSanObject'SstateIntoAbyTeSteAmForStorageorTransermission,andDeserializationReconstructstheObjectStheObjectFromThstream.1.toenableserialization,aclassMustimustimplementTheSerializableizableface.2.UseObjectObjectObjectObjectOutputputputputputtreamToserialializeanobectizeanobectementeabectenobexpent,savin

如何在Java中使用一個時循環 如何在Java中使用一個時循環 Aug 08, 2025 pm 04:04 PM

AwhileloopinJavarepeatedlyexecutescodeaslongastheconditionistrue;2.Initializeacontrolvariablebeforetheloop;3.Definetheloopconditionusingabooleanexpression;4.Updatethecontrolvariableinsidethelooptopreventinfinitelooping;5.Useexampleslikeprintingnumber

修復:Windows Update無法安裝 修復:Windows Update無法安裝 Aug 08, 2025 pm 04:16 PM

runthewindowsupdatetrubloubleshooterviaSettings>更新&安全> is esseShootsoAtomationfixCommonissues.2.ResetWindowSupDateComponentsByStoppingRealatedServices,RenamingTheSoftWaredWaredWaredSoftwaredSistribution andCatroot2Folders,intrestrestartingthertingthertingtherserviceSteStoceTocle

See all articles