簡單易懂的python生成器

目錄

  • 定義
  • 使用 for 循環來迭代生成器對象
  • 斐波那契

定義

  • 在 Python 中,使用了 yield 的函數被稱為生成器(generator)。
  • Python 中的生成器(Generator)是一種特殊的迭代器,可以通過函數來創建。
  • 與常規函數不同的是,生成器使用 yield 語句來產生一個值,并暫停函數的執行,保留當前的狀態,以便下次從暫停的位置繼續執行。

也就是說,生成器其實就是帶yield的函數,而調用該函數時遇到yield的位置,該函數就返回yield返回的值,并且之后該函數會停在那個位置,直到下次調用。

使用 for 循環來迭代生成器對象

定義一個迭代器:

def count_up_to(n):for i in range(n):yield i

使用for循環進行迭代

# 使用生成器進行迭代
for num in count_up_to(5):print(num)

使用next迭代:

# 創建生成器對象
generator = count_up_to(6)
# 輸出
print(next(generator))
print(next(generator))

斐波那契

利用yield每次返回后會保留函數內參數的特點,可以很好的解決遞歸問題:

def fibonacci(n):a, b, cnt = 0, 1, 0while True:if cnt > n:returnyield aa, b = b, a + bcnt += 1n = 5
f = fibonacci(n)
fib_lst = [next(f) for _ in range(5)]
print(fib_lst)

對比不使用yield的實現方法,普通方法(比如迭代方法)會一次性計算和存儲所有的值,可能會占用更多的內存。

生成器的主要優勢是節省內存,因為它們按需生成值,而不是一次性生成所有值。這使得它們非常適合處理大量數據或無限序列的情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37708.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37708.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37708.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Feign忽略Https的SSL最佳方案(且保證負載均衡將失效)

同時解決Https的SSL證書驗證問題和feign不支持Patch請求方法的問題 代碼 1. 工具類 OkHttpUtils.java import javax.net.ssl.*; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import j…

從0開始搭建ns3環境以及NetAnim簡單使用

一、環境準備 ns3是基于GNU/Linux平臺使用C開發的工具軟件,在windows系統中安裝使用ns3環境,可以使用虛擬機VMware并安裝ubuntu系統來實現,現將本教程所用到的虛擬機和系統鏡像放到網盤提供下載 名稱鏈接提取碼VMware Workstation 17 Proht…

簡約時尚的健康手表,智能守護每一刻,dido Y60上手

智能手表是現在很流行的一種智能設備,很多品牌都推出了各種各樣的產品,但是大部分都更側重功能和運動的方面,健康監測往往只是配角,而隨著人們對自己的健康越來越重視,有些朋友只是單純的需要一塊專業的健康監測手表。…

選擇任務管理軟件:哪個更適合你的需求?

隨著互聯網的發展,知識管理是可以成為企業獲得更大發展前景的神兵利器,任務協同,是服務于中小型團隊,或者大型機構的終端組織。來看看這款國外流行的任務管理軟件Zoho Projects。 任務管理是企業協同的重要組成部分。 任務管理是企…

Bitcoin 加速交易操作示例

這里以 Bitcoin Ordinals NFT 為例, 進行加速交易演示 第1步:新建子賬戶 溫馨提示:如果有多條魚未確認,也只需1個賬戶即可,不必搞多個子賬戶 第2步:切換回到老地址(Account 1) 第3步…

【Kubernetes】Kubernetes的PV和PVC的用法

PV、PVC 前言一、 存儲卷1. emptyDir 存儲卷1.1 概念1.2 實例 2. hostPath 存儲卷2.1 概念2.2 實例 3. nfs共享存儲卷 二、PV 和 PVC1. 概念1.1 PV1.2 PVC1.3 PVC 的使用邏輯1.4 創建機制1.5 PV 和 PVC 的生命力周期1.6 創建及銷毀 PV 的流程 2. PV 和 PVC 的創建2.1 查看定義2…

高并發內存池項目(C++實戰項目)

項目介紹 項目來源 本項目實現了一個高并發內存池,參考了Google的開源項目tcmalloc實現的簡易版;其功能就是實現高效的多線程內存管理。由功能可知,高并發指的是高效的多線程,而內存池則是實現內存管理的。 tcmalloc源碼 項目…

論智能與反智能的對立統一

智能和反智能可以被視為一個相對的概念,彼此存在一定的關聯和互補。在發展智能和反智能技術的過程中,我們必須始終牢記倫理和法律的原則,在合法和道德的框架內進行研究和應用,遵守相關的規定和限制。只有在這樣的前提下&#xff0…

linux的shell中 if 的運算符的使用

一、文件比較運算符 e filename 如果 filename存在,則為真 如: [ -e /var/log/syslog ]-d filename 如果 filename為目錄,則為真 如: [ -d /tmp/mydir ]-f filename 如果 filename為常規文件,則為真 如: […

基于vue開發的影視站模板(模仿西瓜視頻)

基于vue3開發的影視站模板, 對接蘋果cms10數據庫表, 采用pythondjangovue開發 效果預覽 http://101.43.124.118:8002 源碼地址 https://github.com/geeeeeeeek/appvideo 運行步驟 1.安裝依賴 npm install 2.運行 npm run dev 代碼說明 入口文件為main.js 接口請求的bas…

【計算機網絡】概述及數據鏈路層

每一層只依賴于下一層所提供的服務,使得各層之間相互獨立、靈活性好,已于實現和維護,并能促進標準化工作。 應用層:通過應用進程間的交互完成特定的網絡應用,HTTP、FTP、DNS,應用層交互的數據單元被稱為報…

MySQL 中常見的幾種高可用架構部署方案

MySQL 中的集群部署方案 前言 這里來聊聊,MySQL 中常用的部署方案。 MySQL Replication MySQL Replication 是官方提供的主從同步方案,用于將一個 MySQL 的實例同步到另一個實例中。Replication 為保證數據安全做了重要的保證,是目前運用…

數據結構初階--二叉樹的鏈式結構

目錄 一.二叉樹鏈式結構的概念 二.二叉樹鏈式結構的功能實現 2.1.鏈式二叉樹的定義 2.2.鏈式二叉樹的構建 2.3.鏈式二叉樹的遍歷 2.3.1.先序遍歷 2.3.2.中序遍歷 2.3.3.后序遍歷 2.3.4.層序遍歷 2.4.鏈式二叉樹的求二叉樹的結點數量 法一:計數法 法二&a…

Linux知識點 -- 進程概念(補充)

Linux知識點 – 進程概念(補充) 文章目錄 Linux知識點 -- 進程概念(補充)一、進程地址空間的堆區二、虛擬地址到物理地址之間的轉化三、虛擬地址到物理地址之間的映射 一、進程地址空間的堆區 在用戶每次使用malloc等函數在進程的…

OBD接口引腳定義

汽車的OBD接口引腳定義分配如下圖所示,OBD接口共有16個引腳(可參考 ISO 15031-3)。 1、引腳1,3,8,9,11,12,13 引腳1,3,8,9,11,12,13由主機廠進行分配。 2、引腳2 如果車輛中使用SAE J1850 10,4 VPW(可變脈沖)來提供…

【React】精選10題

1.React Hooks帶來了什么便利? React Hooks是React16.8版本中引入的新特性,它帶來了許多便利。 更簡單的狀態管理 使用useState Hook可以在函數組件中方便地管理狀態,避免了使用類組件時需要繼承React.Component的繁瑣操作。 避免使用類組件…

小紅書運營 變現方法總結(精)

大家好,我是網媒智星,今天跟大家分享一下小紅書運營方面的知識,怎樣利用小紅書變現?全篇傾情干貨輸出,認真學習,保證您收獲多多。 首先,讓我們來分析一下小紅書平臺的優勢。關于賣東西&#xff…

Open3D (C++) 基于擬合高差的點云地面點提取

目錄 一、算法原理1、原理概述2、參考文獻二、代碼實現三、結果展示1、原始點云2、提取結果四、相關鏈接系列文章(連載中。。。): Open3D (C++) 基于高程的點云地面點提取Open3D (C++) 基于擬合平面的點云地面點提取Open3D (C++) 基于擬合高差的點云地面點提取</

vue + less 實現動態主題換膚功能

文章目錄 前言一、前提條件1. 初始化vue項目2. 安裝插件 二、新建文件夾主題theme1.style.less文件2.model.js文件3.theme.js文件theme文件夾最終效果 三、修改vue.config.js文件四、頁面上的具體使用1. index.vue 頁面2. index.vue 頁面注意點說明3. index.vue 效果 五、在js中…

VSCode使用SSH無密碼連接Ubuntu

VSCode使用SSH無密碼連接Ubuntu 前提條件&#xff1a; 1. 能夠正常使用vscode的Remote-ssh連接Ubuntu 2. Ubuntu配置靜態ip&#xff08;否則經常需要修改Remote-ssh的配置文件里的IP&#xff09; 鏈接-> ubuntun 18.04設為靜態ip&#xff08;.net模式&#xff0c;可連接…