【问题标题】:Returning multiple outputs from function从函数返回多个输出
【发布时间】: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


【解决方案1】:

如果你想返回一个列表,你可以这样做:

def fct():
    return [item for item in itertools.permutations(range(15),number) for number in range(2,4)]

对于生成器

def fct():
    return (item for item in itertools.permutations(range(15),number) for number in range(2,4))

【讨论】:

    【解决方案2】:

    解决方案

    new_tuples = []
    for i in range(0, 5):
        for j in range(1, 16):
            new_tuples.append((i, j))
    
    for i in new_tuples:
        print(i)
    

    输出

    (xenial)vash@localhost:~/python$ python3 text_seg.py 
    (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)
    (0, 15)
    (1, 1)
    

    评论

    这种方法能满足您的需求吗?您可以根据需要交换号码,但这将允许您拥有 list 和 tuples 商店,并能够将它们呼叫到 print。

    【讨论】:

      【解决方案3】:

      您可以通过函数的参数返回列表,并使用函数的返回来表示建立的排列数:

      import itertools
      
      permut = []
      
      def ITERATOR(item):
          n_permuts= 0
          for number in range(2,4):
              for item in itertools.permutations(range(15),number):
                  permut.append(item)
                  n_permuts+= 1
          return n_permuts
      
      print (ITERATOR(permut))
      for item in permut:
          print(item)
      

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多