如果函數(shù)要返回一系列結果,我們常見的方法就是將結果放到一份列表中,然后返回給調用者。比如下面的函數(shù),返回字符串中每個單詞的首字母在真?zhèn)€字符串中的索引:
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比肇源網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式肇源網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋肇源地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。
運行結果:
上述的結果完全符合我們的預期,但 get_word_index 函數(shù)不夠簡潔。下面我們嘗試使用生成器來實現(xiàn):
運行結果:
改寫之后,不僅運行結果符合要求,由于不需要和 result 列表交互,函數(shù)也變得非常簡潔。下面我們就來詳細學習下生成器吧~
生成器是指使用 yield 表達式的函數(shù),調用生成器函數(shù)時,它并不會真的運行,而是會返回迭代器。每次在這個迭代器上面調用內(nèi)置的 next 函數(shù)時,迭代器就會把生成器推進到下一個 yield 表達式那里。生成器傳給 yield 的值均會由迭代器返回給調用者。
此外,如果輸入量非常大,使用列表作為返回值,那么程序就有可能耗盡內(nèi)存并崩潰。相反,使用生成器之后,則可以應對任意長度的輸入數(shù)據(jù)。
例如,下面這個生成器函數(shù)可以獲取文件中單詞的索引,而不管文件內(nèi)容多大,該函數(shù)執(zhí)行時消耗的內(nèi)存,只由單行的文本長度決定:
其中 test_generator.txt 中的內(nèi)容如下:
運行結果:
下面這句話特別重要: 生成器函數(shù)返回的迭代器,是由狀態(tài)的,及調用者不應該反復使用它 。我們那 word_index_iter 來說明:
如果想重復調用,請將其封裝成容器:
運行結果:
關于上述自定義容器的實現(xiàn)原理,我的另外一篇文章做了詳細介紹,鏈接奉上:
不能。Python中,用def語句創(chuàng)建函數(shù)時,可以用return語句指定應該返回的值,該返回值可以是任意類型,不能返回兩個dataframe,Python由荷蘭數(shù)學和計算機科學研究學會的吉多·范羅蘇姆于1990年代初設計,作為一門叫做ABC語言的替代品。
題主你好,
每門語言中都有自己語法, python中return關鍵字的用法是:
也就是說return后面要接的是表達式, 但如果按題主所說的,寫成:
要注意 "person = {xxx}" 這是一個語句, 而非一個表達式, 和python中定義的return語法是相背的,所以不能這么寫.
希望可以幫到題主, 歡迎追問.
函數(shù)可以說是一個黑箱,輸入一些值,然后輸出一些值,因此return就是讓函數(shù)輸出值的操作。\x0d\x0a然而,類,簡單來說就是一系列函數(shù)的集合,它最主要的用途是設定對象和方法。\x0d\x0a\x0d\x0a在Python中,我簡單舉個例子,我要算a+b=c,我輸入a和b,輸出c。\x0d\x0a那么,函數(shù)就是這樣的:\x0d\x0adefplus(a,b):\x0d\x0ac=a+b\x0d\x0areturnc\x0d\x0a這里你就可以看到,輸入兩個值,經(jīng)過函數(shù)內(nèi)部計算,就輸出的一個值。在主程序中你調用這個函數(shù),比如:c=plus(1,2),那么printc就得到3。\x0d\x0a\x0d\x0a但是類是不同的,同樣是計算a+b=c,我要先設定一種方法,比如叫做Plus,如下:\x0d\x0aClassPlus:\x0d\x0adef__init__(self,a,b):\x0d\x0aself.a=a\x0d\x0aself.b=b\x0d\x0adefreturn_result(self):\x0d\x0aself.c=self.a+self.b\x0d\x0areturnself.c\x0d\x0a那么在主程序中你就要調用這個類,如下:\x0d\x0aequation=Plus(1,2)\x0d\x0aresult=equation.return_result()\x0d\x0aprintresult\x0d\x0a這樣你就會得到結果3。\x0d\x0a\x0d\x0a希望可以幫到你,或者你把你的程序發(fā)過來,我看看~