在 Python 函数中同时使用"yield"(即生成器)和"return"



我试图创建一个简单的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

计划是以两种不同的方式调用函数,并获得不同的相应输出:

  1. square_gen([1,2,3])返回一个生成器对象,我可以对其进行迭代(因为参数的长度不大于3(
  2. 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

最新更新