python協程:yield實現協程執行、生成器取值的三種方式

yield關鍵字執行流程

注意:yield關鍵字的調用次數如果超過了任務執行次數會報錯,提示stopiteration異常,例如
在這里插入圖片描述
正常范圍內的任務執行


# 定義一個任務(函數1)
def task1():for i in range(3):print(f'----task1 i = {i}----')# yield 關鍵字會造成當前函數稱為一個生成器對象# yield 會將當前任務函數掛起,不繼續向下執行,CPU不再回等待掛起結束的任務yield# 定義一個任務(函數2)
def task2():for i in range(3):print(f'----task2 i = {i}----')yieldif __name__ == '__main__':# 現在的程序只有一條主線程(IO并發操作)# 任務(函數)t1 = task1()   # task1()不是調用函數,函數中只要有yield關鍵字,就變成了返回生成器對象t2 = task2()# <generator object task1 at 0x0000025C5A565A80># print(t1)# <generator object task2 at 0x0000025C5A567C40># print(t2)# 如果是一個生成器對象,函數如何執行?# yield關鍵字需要配合 next 內置函數實現調用next(t1)next(t2)# 第二次調用next(t1)next(t2)# 第三次調用next(t1)next(t2)# 第四次調用# next(t1)# next(t2)

執行結果
在這里插入圖片描述

生成器取值的三種方式(next、循環+next、循環)

# 1,1,2,3,5,8,13,21,34...斐波那契數列,后面第三個數是前兩個數和# 生成器對象,使用了yield關鍵字,當前函數已經成為了生成器對象
def fibonacci(n):a,b = 1,1current_n = 0while current_n < n:yield aa, b = b, a + bcurrent_n += 1# 退出循環,已經完成了執行,讓函數返回一個結果# 最終生成器的返回結果是在發生異常的時候返回的return 'done'if __name__ == '__main__':v = fibonacci(5)print(v)print(next(v))print(next(v))print(next(v))print(next(v))print(next(v))# print(next(v)) StopIteration: doneprint('-' * 20)v2 = fibonacci(5)while True:try:g = next(v2)print(g)except StopIteration as e:print(e)  # 這里的e就是生成器的一場結果break# 生成器對象就是一個可迭代對象print('-' * 20)for i in fibonacci(5):print(i)

執行結果
在這里插入圖片描述

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

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

相關文章

pdf刪除一頁 python實現(已驗證)

首先安裝庫 使用PyPDF2 首先&#xff0c;確保你已經安裝了PyPDF2。如果沒有安裝&#xff0c;可以通過pip安裝&#xff1a; pip install PyPDF2 然后運行 import PyPDF2def remove_page(input_pdf_path, output_pdf_path, page_number_to_remove):# 打開PDF文件with open(i…

2025.1版本PyCharam找不到已存在的conda虛擬環境

前言 創建Python項目指定conda虛擬環境是最常用的操作,我下載的2025.1版本PyCharam編譯器找不到我已經創建好的conda虛擬環境,解決方法如下 目錄 問題描述 問題解決 總結 問題描述 我使用2025.1版本PyCharam編譯器創建項目指定已經存在的虛擬環境出現如下情景 說是我沒有…

開機啟動項在哪里設置 實用步驟分享

電腦開機時&#xff0c;系統會自動運行一系列程序&#xff0c;其中包括必要的系統進程和用戶自行添加的啟動項。然而&#xff0c;過多的啟動項可能會導致開機速度變慢&#xff0c;影響系統性能。因此&#xff0c;合理管理開機啟動項&#xff0c;可以優化電腦的運行效率。電腦開…

LeetCode--39.組合總和

前引&#xff1a;明天就考最后一趟考試&#xff0c;最近考試周&#xff0c;我時時斷更&#xff0c;從明天開始&#xff0c;就會一直更新了&#xff0c;可以期待一下 解題思路&#xff1a; 1.獲取信息&#xff1a; 給定一個無重復的整數數組和一個目標值 從數組中選取任意數量的…

Visual Studio2022和C++opencv的配置保姆級教程

1.c桌面開發和windows平臺開發&#xff08;Visual Studio2022安裝時&#xff09; 2.下載OPenCV 3.系統屬性→添加環境變量→Path 4.VS2022配置opencv 5.項目→屬性→VC目錄中的包含目錄和庫目錄 5.項目→屬性→VC目錄中的包含目錄和庫目錄 包含 目錄添加&#xff1a; D:\…

使用Ansible的playbook安裝HTTP

實驗環境 安裝好ansible 一、準備測試服務&#xff08;192.168.10.41&#xff09; 1、安裝HTTP服務 dnf -y install httpd 2、啟動HTTP服務 systemctl start httpd 3、使用瀏覽器訪問 192.168.10.41 因為開啟了防火墻&#xff0c;所有無法訪問 4、開放防火墻的80端口 …

V少JS基礎班之第六彈

一、 前言 第六彈內容是閉包。 距離上次函數的發布已經過去了一個多月&#xff0c; 最近事情比較多&#xff0c;很少有時間去寫文章&#xff0c; 低質量還得保證所以本章放草稿箱一個月了&#xff0c;終于補齊了&#xff0c;其實還有很多細節要展開說明&#xff0c;想著拖太久…

【面板數據】全國高頻交易明細數據(2000-2024.7)

中國土地交易市場作為國家宏觀調控的重要組成部分&#xff0c;其通過市場機制&#xff0c;使土地使用權在不同主體間流轉&#xff0c;將土地資源配置給最具利用效率的部門或企業&#xff0c;提升土地利用率和經濟產出。中國土地高頻交易明細數據匯集了全國范圍內2000-2024年7月…

MongoDB 常用增刪改查方法及示例

MongoDB 的增刪改查&#xff08;CRUD&#xff09;操作是其核心功能&#xff0c;主要通過 mongo shell 或驅動&#xff08;如 Node.js、Python 等&#xff09;實現。以下是最常用操作的詳細說明及示例&#xff08;基于 mongo shell 語法&#xff09;。 ?一、插入操作&#xff…

moodle升級(4.5到5.0)

升級目標 由Moodle 4.5 (Build: 20241129) 升級到Moodle 5.0.1 (Build: 20250629) 參考教程&#xff1a;moodle升級&#xff08;詳細版&#xff09;-CSDN博客 操作平臺&#xff1a;寶塔 通過寶塔進行備份 備份文件 將/www/wwwroot/moodle 和/www/wwwroot/moodledata 復制…

基于Apache POI實現百度POI分類快速導入PostgreSQL數據庫實戰

## 引言:POI數據的價值與挑戰 POI(Point of Interest)數據作為地理信息系統的核心要素,在智慧城市、位置服務、商業分析等領域具有重要價值。百度POI數據包含了豐富的地點信息(如名稱、類別、坐標等),但如何高效處理這些數據并將其導入數據庫進行分析是開發者面臨的挑戰…

linux LAMP 3

[rootcode apache2]# bin/apachectl AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using fe80::20c:29ff:fe2a:708a. Set the ‘ServerName’ directive globally to suppress this message root192.168.235.5s password:┌─…

UI自動化-Selenium WebDriver

前言 Selenium WebDriver 是 Selenium 項目中最核心、最強大的組件&#xff0c;它是一個用于自動化控制網頁瀏覽器的開源 API&#xff08;應用程序編程接口&#xff09;。 簡單來說&#xff0c;Selenium WebDriver 就是一個允許你用編程語言&#xff08;如 Java、Python、C#、…

具身多模態大模型在感知與交互方面的綜述

引言在本學期方老師的《機器人與大模型》課上&#xff0c;我首次接觸到了關于具身智能的前沿知識&#xff0c;尤其作為課上交互組的成員&#xff0c;從表情識別到語音交互到機械狗的開發實踐進行了一些有意思的探索&#xff0c;使我在其中感受到了具身智能的巨大魅力和無限潛力…

UI 設計|審美積累 | 擬物化風格(Skeuomorphism)

擬物化是指把現實世界的材質、光影和結構帶到數字界面中。木紋、金屬、皮革、紙張等真實物體的質感&#xff0c;被細致地還原到屏幕上&#xff0c;讓用戶一眼就明白元素的意義與操作方式。它曾是iOS6之前移動端設計的主流風格&#xff0c;也一度被極簡風格取代&#xff0c;但在…

EventBridge精準之道:CloudTrail事件 vs. 服務原生事件,我該如何選?

當我們深入使用AWS EventBridge時&#xff0c;常常會發現一個有趣的現象&#xff1a;對于同一個操作&#xff08;比如啟動一個EC2實例&#xff09;&#xff0c;EventBridge中似乎會出現兩種事件。一種來自CloudTrail&#xff0c;記錄了API調用的行為&#xff1b;另一種則直接來…

【算法】動態規劃 斐波那契類型: 740. 刪除并獲得點數

740. 刪除并獲得點數 中等 題目 給你一個整數數組 nums &#xff0c;你可以對它進行一些操作。 每次操作中&#xff0c;選擇任意一個 nums[i] &#xff0c;刪除它并獲得 nums[i] 的點數。之后&#xff0c;你必須刪除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 開始你…

AWS MySQL 讀寫分離配置指南

# AWS JDBC Wrapper讀寫分離配置實戰&#xff1a;Spring Boot MyBatis Plus完整解決方案 ## 前言 在微服務架構中&#xff0c;數據庫讀寫分離是提升系統性能的重要手段。本文將詳細介紹如何在Spring Boot項目中使用AWS JDBC Wrapper實現自動讀寫分離&#xff0c;重點解決MyBat…

opencv檢測運動物體

檢測到的所有移動物體中輪廓中找到面積最大的輪廓&#xff0c;并繪制這個輪廓的矩形框。 #include <opencv2/opencv.hpp> #include <iostream>int main() {// 打開視頻文件或攝像頭cv::VideoCapture capture;capture.open("move3.mp4"); // 打開視頻文件…

Camera相機人臉識別系列專題分析之十五:人臉特征檢測FFD算法之libcvface_api.so算法API詳細注釋解析

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: Camera相機人臉識別系列專題分析之十五:人臉特征檢測FFD算法之libcvface_api.so算法API詳細注釋解析 目錄 一、libcvface_api.so算法API詳細注釋解析