新聞中心
Python 函數(shù) - 返回生成器
如果函數(shù)要返回一系列結(jié)果,我們常見(jiàn)的方法就是將結(jié)果放到一份列表中,然后返回給調(diào)用者。比如下面的函數(shù),返回字符串中每個(gè)單詞的首字母在真?zhèn)€字符串中的索引:
為梁河等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及梁河網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、做網(wǎng)站、梁河網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
運(yùn)行結(jié)果:
上述的結(jié)果完全符合我們的預(yù)期,但 get_word_index 函數(shù)不夠簡(jiǎn)潔。下面我們嘗試使用生成器來(lái)實(shí)現(xiàn):
運(yùn)行結(jié)果:
改寫(xiě)之后,不僅運(yùn)行結(jié)果符合要求,由于不需要和 result 列表交互,函數(shù)也變得非常簡(jiǎn)潔。下面我們就來(lái)詳細(xì)學(xué)習(xí)下生成器吧~
生成器是指使用 yield 表達(dá)式的函數(shù),調(diào)用生成器函數(shù)時(shí),它并不會(huì)真的運(yùn)行,而是會(huì)返回迭代器。每次在這個(gè)迭代器上面調(diào)用內(nèi)置的 next 函數(shù)時(shí),迭代器就會(huì)把生成器推進(jìn)到下一個(gè) yield 表達(dá)式那里。生成器傳給 yield 的值均會(huì)由迭代器返回給調(diào)用者。
此外,如果輸入量非常大,使用列表作為返回值,那么程序就有可能耗盡內(nèi)存并崩潰。相反,使用生成器之后,則可以應(yīng)對(duì)任意長(zhǎng)度的輸入數(shù)據(jù)。
例如,下面這個(gè)生成器函數(shù)可以獲取文件中單詞的索引,而不管文件內(nèi)容多大,該函數(shù)執(zhí)行時(shí)消耗的內(nèi)存,只由單行的文本長(zhǎng)度決定:
其中 test_generator.txt 中的內(nèi)容如下:
運(yùn)行結(jié)果:
下面這句話特別重要: 生成器函數(shù)返回的迭代器,是由狀態(tài)的,及調(diào)用者不應(yīng)該反復(fù)使用它 。我們那 word_index_iter 來(lái)說(shuō)明:
如果想重復(fù)調(diào)用,請(qǐng)將其封裝成容器:
運(yùn)行結(jié)果:
關(guān)于上述自定義容器的實(shí)現(xiàn)原理,我的另外一篇文章做了詳細(xì)介紹,鏈接奉上:
如何使用python函數(shù)返回值
函數(shù)的尾部 return 要是用的返回值 def roll_dice(number=3, points=None): print('Choice points...') if points is None: points = [] while number 0: point = random.randrange(1, 7) points.append(point) number = number - 1 return points
python函數(shù)高級(jí)
一、函數(shù)的定義
函數(shù)是指將一組語(yǔ)句的集合通過(guò)一個(gè)名字(函數(shù)名)封裝起來(lái),想要執(zhí)行這個(gè)函數(shù),只需要調(diào)用函數(shù)名即可
特性:
減少重復(fù)代碼
使程序變得可擴(kuò)展
使程序變得易維護(hù)
二、函數(shù)的參數(shù)
2.1、形參和實(shí)參數(shù)
形參,調(diào)用時(shí)才會(huì)存在的值
實(shí)慘,實(shí)際存在的值
2.2、默認(rèn)參數(shù)
定義:當(dāng)不輸入?yún)?shù)值會(huì)有一個(gè)默認(rèn)的值,默認(rèn)參數(shù)要放到最后
2.3、 關(guān)鍵參數(shù)
定義: 正常情況下,給函數(shù)傳參數(shù)要安裝順序,不想按順序可以用關(guān)鍵參數(shù),只需要指定參數(shù)名即可,(指定了參數(shù)名的就叫關(guān)鍵參數(shù)),但是要求是關(guān)鍵參數(shù)必須放在位置參數(shù)(以位置順序確定對(duì)應(yīng)的參數(shù))之后
2.4、非固定參數(shù)
定義: 如你的函數(shù)在傳入?yún)?shù)時(shí)不確定需要傳入多少個(gè)參數(shù),就可以使用非固定參數(shù)
# 通過(guò)元組形式傳遞
# 通過(guò)列表形式傳遞
# 字典形式(通過(guò)k,value的方式傳遞)
# 通過(guò)變量的方式傳遞
三、函數(shù)的返回值
作用:
返回函數(shù)執(zhí)行結(jié)果,如果沒(méi)有設(shè)置,默認(rèn)返回None
終止函數(shù)運(yùn)行,函數(shù)遇到return終止函數(shù)
四、變量的作用域
全局變量和局部變量
在函數(shù)中定義的變量叫局部變量,在程序中一開(kāi)始定義的變量叫全局變量
全局變量作用域整個(gè)程序,局部變量作用域是定義該變量的函數(shù)
當(dāng)全局變量與局部變量同名是,在定義局部變量的函數(shù)內(nèi),局部變量起作用,其他地方全局變量起作用
同級(jí)的局部變量不能互相調(diào)用
想要函數(shù)里邊的變量設(shè)置成全局變量,可用global進(jìn)行設(shè)置
五、特殊函數(shù)
5.1、嵌套函數(shù)
定義: 嵌套函數(shù)顧名思義就是在函數(shù)里邊再嵌套一層函數(shù)
提示 在嵌套函數(shù)里邊調(diào)用變量是從里往外依次調(diào)用,意思就是如果需要調(diào)用的變量在當(dāng)前層沒(méi)有就會(huì)去外層去調(diào)用,依次內(nèi)推
匿名函數(shù)
基于Lambda定義的函數(shù)格式為: lambda 參數(shù):函數(shù)體
參數(shù),支持任意參數(shù)。
匿名函數(shù)適用于簡(jiǎn)單的業(yè)務(wù)處理,可以快速并簡(jiǎn)單的創(chuàng)建函數(shù)。
# 與三元運(yùn)算結(jié)合
5.3、高階函數(shù)
定義:變量可以指向函數(shù),函數(shù)的參數(shù)可以接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱之為高階函數(shù) 只需要滿足一下任意一個(gè)條件,即是高階函數(shù)
接收一個(gè)或多個(gè)函數(shù)作為輸入
return返回另一個(gè)函數(shù)
5.4、遞歸函數(shù)
定義:一個(gè)函數(shù)可以調(diào)用其他函數(shù),如果一個(gè)函數(shù)調(diào)用自己本身,這個(gè)函數(shù)就稱為遞歸函數(shù)
在默認(rèn)情況下Python最多能遞歸1000次,(這樣設(shè)計(jì)師是為了防止被內(nèi)存被撐死)可以通過(guò)sys.setrecursionlimit(1500)進(jìn)行修改
遞歸實(shí)現(xiàn)過(guò)程是先一層一層的進(jìn),然后在一層一層的出來(lái)
必須有一個(gè)明確的條件結(jié)束,要不然就是一個(gè)死循環(huán)了
每次進(jìn)入更深層次,問(wèn)題規(guī)模都應(yīng)該有所減少
遞歸執(zhí)行效率不高,遞歸層次過(guò)多會(huì)導(dǎo)致站溢出
# 計(jì)算4的階乘 4x3x2x1
# 打印數(shù)字從1-100
5.5、閉包現(xiàn)象
定義:內(nèi)層函數(shù)調(diào)用外層函數(shù)的變量,并且內(nèi)存函數(shù)被返回到外邊去了
閉包的意義:返回的函數(shù)對(duì)象,不僅僅是一個(gè)函數(shù)對(duì)象,在該函數(shù)外還包裹了一層作用域,這使得,該函數(shù)無(wú)論在何處調(diào)用,優(yōu)先使用自己外層包裹的作用域
python函數(shù)如何同時(shí)處理返回值以及返回內(nèi)容?
python支持返回多個(gè)返回值,所以你可以考慮返回兩個(gè)值來(lái)解決。
參考代碼和如何調(diào)用示例如下:
python的input函數(shù)的返回值
input函數(shù)的返回值是你輸入的值,即輸入1則返回"1",轉(zhuǎn)換成1必須int("1"),也就是說(shuō)n=int(input("")),值存在n變量里。
input函數(shù)參數(shù)是提示字符串。
input("啊")相當(dāng)于輸出"啊"之后輸入。
名稱欄目:python函數(shù)結(jié)果返回,python獲取回調(diào)函數(shù)返回值
URL網(wǎng)址:http://fisionsoft.com.cn/article/dsipeso.html