【发布时间】:2019-02-07 17:40:31
【问题描述】:
我不确定这是否可能,但是...
我正在尝试编写一个函数来输出数字列表,以便可以将它们输入到另一个函数中。不过,我走到了死胡同,return 或 yield(在此上下文中使用)都无法满足我的需求。
def ITERATOR():
for number in range(1,3):
for item in itertools.permutations(range(15),number):
yield item
显然,只要使用return,函数就会中断,yield 会立即返回所有内容。我理想地希望它输出的是每行打印的内容:
def ITERATOR():
for number in range(2,4):
for item in itertools.permutations(range(15),number):
print(item)
即:
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(0, 5)
(0, 6)
(0, 7)
(0, 8)
(0, 9)
(0, 10)
(0, 11)
(0, 12)
(0, 13)
(0, 14)
etc...
有什么方法可以实现吗?
【问题讨论】:
-
不要将
return放在for循环中。它立即脱离了功能。此外,ALL_CAPS 真的应该用于全局变量名,而不是函数名:参见PEP8 -
"
yield一次返回所有内容" - 这正是它的作用不是。请说明具体问题;您如何尝试使用该功能? -
yield将生成器返回到它返回的值,您可以根据需要使用此生成器。您不必一次接受所有值,只需对其进行迭代即可。 -
我有另一个函数,当一个数字列表(或元组)传递给它时输出。我想将这些(0,1),(0,2)等中的每一个单独传递给它。现在想想,有没有可能做到:for item in itertools.permutations(range(15),number): functionTwo(item) ?
-
只是对您的陈述进行一些更正:“return 或 'yield'(在此上下文中使用)都不能给我想要的东西” - 两者都可以做你想要的,但你必须了解它们是如何工作的。 “yield 立即返回所有内容” - 它绝对不会。
标签: python function return yield