python函数能返回列表吗_Python函数返回列表还是作为生成器工作?
我正在嘗試創(chuàng)建一個返回對象或作為生成器的函數(shù).
這是一個壞主意,因為作為一種最佳實踐,您希望函數(shù)可靠地返回相同類型的值,但為了科學的利益……
我正在使用Python 2,因此range返回一個列表,xrange是一個可迭代的(有趣的是它也提供了__len__).
def xr(start, stop=None, step=1, gen=True):
if stop is None:
start, stop = 0, start
if gen == True:
for i in xrange(start, stop, step):
yield i
else:
return range(start, stop, step)
我收到此錯誤:
File "", line 8
SyntaxError: 'return' with argument inside generator
問題:
為什么(除了顯而易見的“你不能同時在函數(shù)中產(chǎn)生和返回”,假設(shè)是正確的)它是否這樣做?看看我的代碼,不清楚為什么這樣做會很糟糕.
我怎么試圖繞過這個?我知道我可以返回xrange而不是從xrange中產(chǎn)生每個項目,所以我可以返回在另一個函數(shù)中創(chuàng)建的生成器,但是有更好的方法嗎?
解決方法:
>>> def xr(start, stop=None, step=1, gen=True):
... if stop is None:
... start, stop = 0, start
... if gen == True:
... return (i for i in xrange(start, stop, step)) #
... else:
... return range(start, stop, step)
...
>>> xr(2, gen=False)
[0, 1]
>>> xr(2, gen=True)
at 0x0000000002C1C828>
>>> list(xr(2, gen=True))
[0, 1]
順便說一下,我寧愿只定義一個生成器函數(shù).然后使用list(xr(..))如果我需要一個列表.
更新另外,您可以使用iter(xrange(開始,停止,步))而不是@DSM評論的生成器表達式.見Built-in functions — iter.
標簽:python,generator
來源: https://codeday.me/bug/20190714/1459908.html
總結(jié)
以上是生活随笔為你收集整理的python函数能返回列表吗_Python函数返回列表还是作为生成器工作?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux apache目录权限配置,L
- 下一篇: 计算机中2的四次方为啥是4位,计算机基础