有时,当将递归函数重写为生成器时,我忽略了return
的简洁性。在
"""
Returns a list of all length n strings that can be made out of a's and/or b's.
"""
def ab_star(n):
if n == 0:
return [""]
results = []
for s in ab_star(n - 1):
results.append("a" + s)
results.append("b" + s)
return results
变成
^{pr2}$正是这个else
让我恼火。我希望有一种方法可以说“yield
,这就是它,所以退出函数”。有办法吗?在
不要错过
return
,使用它。在您可以在
yield
之后return
。在另一种方法是在两种情况下使用
^{pr2}$return
,其中第一种情况返回长度为1的序列,第二种情况返回生成器表达式:这种对}的限制。在
yield
的回避避免了在同一个函数中不能同时使用return <value>
和{(这在您的例子中是有效的,因为您的函数不必是生成器。因为您只迭代结果,所以它也可以返回一个元组。)
没有。当我写"Simple Generators PEP"时,我注意到:
但这一点一直没有得到重视。在完成之前;-),您可以将生成器的第一部分编写为:
然后可以删除
else:
语句并删除其余语句。在相关问题 更多 >
编程相关推荐