python生成器函數(generator),python3學習筆記:生成器generator

簡單了解下生成器generator,主要是yield的返回值和send的傳參,記錄下。

生成器的基本屬性

generator = 函數 + yield

簡單說,就是一個函數,里面用到了關鍵字yield,就成為了一個生成器

生成器和函數的不同主要在于:

直接調用生成器,不會執行;

舉個栗子:a = f() #這里f()是個生成器

運行上面這句,f()不會執行,首次執行需要使用next(a)或a.send(None),后面會細講

每次執行,會暫時中斷在yield關鍵字處,而且通過yield可以返回一個參數

下次再接著執行,會從上次中斷的yield處接著執行,并可以通過send()傳遞參數,當然繼續中斷在下一個yield處

如果通過send()或next()執行generator,而沒有找到下一個yield,會報錯

yield返回值&&傳參

總結就是:

return = send(msg)

傳遞參數msg給當前中斷yield前面的變量

同時返回下一個yield后面的參數給return

return = next(a)

沒有傳遞參數或者說傳遞參數None給當前中斷yield前面的變量

同時返回下一個yield后面的參數給return

直接看下面的栗子,直觀明了

#生成器

def f():

print('start')

a = yield 1 #可以返回參數1,并接收傳遞的參數給a

print(a)

print('middle')

b = yield 2 #可以返回參數2,并接收傳遞的參數給b

print(b)

print('next')

c = yield 3 #可以返回參數3,并接收傳遞的參數給c

print(c) #這里貌似永遠不會執行,因為總會在上一行的yield處結束

a = f() #這里不會執行,即沒有任何打印信息

#a.next() #這種寫法在python3里面會報錯

return1 = next(a)#輸出start,中斷在yield 1處,返回yield后面的1給return1

#return1 = a.send(None) #效果同上一條語句

#return1 = a.send('test') #這里會報錯

#如果首次執行generator,就傳遞一個非None的參數,因為第一次執行不是從一般的中斷yield處執行起,所以沒有yield關鍵字來接收傳參,就會報錯

print(return1)

return2 = next(a)#傳入參數為None,即a=None,返回2給return2

print(return2)

return3 = a.send('msg')#傳入參數msg,即b=msg,返回3給return3

print(return3)

執行結果如下:

start

1

None

middle

2

msg

next

3

[Finished in 0.7s]

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

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

相關文章

復旦微電子fpga數據手冊_專注FPGA圖像加速領域 深維科技跨入發展快車道

日前,在2019賽靈思開發者大會(美洲站)上,深維科技正式面向全球發布ThunderImage三款重磅圖像加速產品:全球最快的JPEG2JPEG縮略圖方案、超高性能的JPEG2WebP轉碼方案及世界級超高密度算力的JPEG2JPEG縮略圖方案。新產品一經發布立即“技驚”四…

oracle Blob保存方式,關于文件保存到Oracle中BLOB字段的方法及例子

關于文件保存到Oracle中BLOB字段的方法及例子-------------------------------------------public class FileOpClass{public static byte[] GetFileStream(string filepath){byte[] byteArray null;FileStream fs null;try{fs new FileStream(filepath, FileMode.Open);lon…

python 調c++生成的dll 中識別char *_基于tensorflow 實現端到端的OCR:二代身份證號識別...

最近在研究OCR識別相關的東西,最終目標是能識別身份證上的所有中文漢字數字,不過本文先設定一個小目標,先識別定長為18的身份證號,當然本文的思路也是可以復用來識別定長的驗證碼識別的。 本文實現思路主要來源于Xlvector的博客&a…

php友價商城手游,2019年T5友價商城網站程序-偽靜態規則

# Version 3.1.0.73RewriteEngine on#RewriteBase /RewriteRule vip(.*) /shop/view.php?str$1RewriteRule ^(.*)/search(.*).html /$1/index.php?str$2RewriteRule ^(.*)/goods([0-9]*).html /$1/goods.php?id$2RewriteRule ^(.*)/(.*)list(.*).html /$1/$2list.php?str$3…

oracle 的跨天查詢,考勤跨天如何統計 - Oracle開發 - ITPUB論壇-中國專業的IT技術社區...

本帖最后由 yaksha1 于 2020-9-11 17:29 編輯請問下,目前正在統計每個人每天考勤數據是否正常,上班打一次卡,下班打一次卡,算是正常。打卡情況大致分兩種,一種是正常白班,朝九晚五,一種是跨天&a…

php程序員學什么語言好就業_2019年初中畢業生學什么專業好?學什么專業好就業?...

前言:據了解,目前我國職業人才缺口較大,市場供需不平衡。許多學生往往還沒畢業,就已經與企業簽訂了就業協議。因此,有許多家長愿意把小孩子送到專業學校進行就讀。畢竟可以學的一門好專業,對學生將來的路是…

中print中加f_Python3中的格式化輸出

Python3字符串格式化輸出有兩種形式實現:a:字符串格式化表達式: ...%... % (values)b:字符串格式化方法調用:...{}....format(values) 或者 f...{xx}...1:字符串格式化的類型碼(typecode)(表1)2: 字符串格式化表達式格…

Json-ServerMockJs簡單快速生成測試數據

Json-Server&MockJs簡單快速生成測試數據 1、Json-Server 和 MockJs的安裝 npm install -g json-server //全局安裝2、創建目錄和初始話 例如:創建D:\ProjectOne文件夾 3、打開終端或者powershell進入ProjectOne文件夾 4、初始化項目 npm init5、安裝Mock…

oracle索引sys_nc,通過dba_ind_columns表查到索引所在列的名字為SYS_NC00133$

使用下面的腳本查看表上索引相關信息:selectind.uniqueness uniq,ind.owner||.||col.index_name indname,col.column_name colnamefromdba_ind_columns col,dba_indexes indwhereind.owner upper(&ixowner)andind.table_name upper(&tabname)andcol.index…

oracle nvl和coalesce,NVL與Coalesce之間的Oracle差異

慕碼人8056858COALESCE是更現代的功能,是ANSI-92標準的一部分。NVL在Oracle具體的,它在推出80的前存在任何標準。在兩個值的情況下,它們是同義詞。但是,它們的實現方式不同。NVL總是計算兩個參數,同時COALESCE通常在找…

安卓簽名生成工具_ios app如何進行內測?ios app和安卓app的內測有何區別?

目前手機主流的操作系統分為Android和iOS兩大陣營,分別是由谷歌和蘋果進行開發維護。這兩大平臺的應用都相互獨立,無論是運行機制還是底層原理,都不一樣,所以即使是同一款App也是需要針對在兩大平臺上分別進行內測和運營、發布。那…

cx oracle dpi 1002,cx_Oracle連接數據庫總結

python中連接oracle數據庫使用第三方庫文件cx_Oracle時遇到了各種問題,網上查找資料調試了幾天才弄好,下面是不斷調試后總結的一些經驗。1.oracle客戶端(Oracle Instant Client)版本需要和操作系統版本位數相同,同時cx_Oracle官方文檔(http:/…

虛擬機python建站_搭建本地虛擬服務器linux(CentOS 7)的python虛擬環境(Hyper-V演示)...

新建虛擬機->安裝CentOS7->新建虛擬交換機:內部網絡->CentOS7設置->網絡適配器:虛擬交換機:新建虛擬交換機->進入CentOS#cd /etc/sysconfig/network-scripts/#ls -a#vi ifcfg-eth0 #(有些系統不是eth0,前面ifcfg-的…

matlab 輸入日期,matlab輸入年月日算一年中的第幾天.doc

matlab輸入年月日算一年中的第幾天clc,clear all,close alldisp This program calculates the day of year given the ;disp current date. ;month input Enter current month 1-12 : ;day input Enter current day 1-31 : ;year input Enter current year yyyy : ;%Check for …

深拷貝的缺點_拷貝?還傻傻分不清深淺?

「引言」?臣聞求木之長者,必固其根本;欲流之遠者,必浚其泉源。---- 魏征 《諫太宗十思疏》?或許你會問到,網上已經把深淺拷貝(算一個面試的高頻考點了吧)的文章都快寫爛了,為什么自己還要重新操刀寫一遍呢&#xff0…

php 失去 焦點 另一個表單獵取值,同一表單如何根據某一個文本框的值 改變另一個文本框的值...

我用的是失去焦點,然后后臺查詢到了數據,返回回來顯示不了!!$(document).ready(function(){$("#card").blur(function(){var card$("#card").val();if(card!""){$.get("{:U(guoye/yanzheng)}&…

實現文件中名詞的統計計數_通過勤哲EXCEL和Excel中的rank函數實現排名統計

如今,信息化已成為各行業企業轉型和發展的關鍵所在,信息化技術最明顯的特點是企業不同部門的人在信息技術的支撐下,可以利用豐富的資源與工具展開協作學習,在相對自由的模式和環境下,改變傳統設計相對局限、固定思維的…

php 選擇 出現列表,php – 如何從加權列表中選擇4個唯一項?

所以我有一個加權項目列表,我想從這個列表中選擇4個非重復項目.Item WeightApple 5Banana 7Cherry 12...Orange 8Pineapple 50最有效的方法是什么?我最初的嘗試是,如果一個已經被選中的項目出現的話,只需重新選擇隨后的選秀權……但是對于一個小名單,這可能會導致大…

安徽關節式焊接機器人_上下料機器人的重要性體現在哪里?它有哪些優勢?

上下料機器人是工業機器人家族中從事加工應用的重要成員之一,能滿足“快速、大批量加工節拍”、“節省人力成本”、“提高生產效率”等要求,成為越來越多中心企業的理想選擇。那么,上下料機器人有哪些特征和優勢?企業主應該如何選…

oracle查詢ora03114,求教:ora-03114錯誤從哪里排查?

ERP軟件偶爾會報 ora-03114錯誤 未連接到oracle我檢查數據庫的根超時有關的設置dba_profiles中的如下兩個參數,都是不限制connect_timeunlimitedidle_timeunlimitedsqlnet.net中,只設置了如下參數SQLNET.EXPIRE_TIME5 --這個用來清除僵死連接的監聽日志文…