我试图创建一个简单的Python函数,其中的结果是生成器或正常输出,具体取决于条件。但该功能没有起作用。似乎在函数中出现关键字"yield"会导致函数在所有情况下返回生成器。
下面是一个简单的函数,演示了我尝试做的事情
# Generator function
def square_gen(numbers):
if len(numbers) > 3:
for number in numbers:
yield number**2
else:
output= []
for number in numbers:
output.append(number**2)
return output
计划是以两种不同的方式调用函数,并获得不同的相应输出:
square_gen([1,2,3])
返回一个生成器对象,我可以对其进行迭代(因为参数的长度不大于3(square_gen([1,2,3,4])
返回[1,4,9,16]
(因为参数的长度大于3(
但是,只有1)
有效。它返回一个生成器对象,可以对其进行迭代。令人惊讶的是,2)
仍然返回一个生成器对象(我想知道为什么(,但在这个生成器对象上循环会导致错误。
所以基本上,我想知道为什么函数的非生成器分支仍然返回生成器对象。
您的假设是正确的,在方法中的任何位置都有"yield"会生成生成器,即使它在"if"下也是如此。
并不是说有很多理由这样做,但如果你想实现你所要求的,你可以像一样这样做
def square_gen(numbers):
if len(numbers) > 3:
def gen():
for number in numbers:
yield number**2
return gen()
else:
output= []
for number in numbers:
output.append(number**2)
return output