【问题标题】:Return more than one value in python function在python函数中返回多个值
【发布时间】:2019-05-10 04:28:03
【问题描述】:

我试图在 python 中使用 *args 和 for 循环,但是我看不到如何返回传递给函数的所有值,该函数应该返回所有偶数

def f_even(*args):
    for item in args:
        if item%2 == 0:
            return item

上面的代码只返回第一个值,我猜在返回后它会退出函数。确实,如果我改用 print,它会起作用

当我将 (1,2,3,4,5) 传递给函数时,我试图找到一种方法来返回一个包含所有偶数的元组

谢谢!

【问题讨论】:

  • 那么,返回一个元组? return x, y 完全有效。但是,在 for 循环中包含 return 可能不是您想要的。 return 会立即让你退出该功能。
  • 你应该阅读docs.python.org/3/tutorial/datastructures.html并学习使用列表。
  • 例如,您可以将要返回的值存储在一个列表中,然后返回该列表。如果您喜欢冒险,也许是时候了解一下生成器了!
  • 也许你应该看看generatorsyield 声明?

标签: python return tuples


【解决方案1】:

在 python 中,您可以使用列表推导来执行此操作。将使您的代码更具可读性并且也会缩小它。

def f_even(*args):
   return [elem for elem in args if elem % 2 == 0]

【讨论】:

  • 我猜这是通过列表理解,也非常有用。谢谢
【解决方案2】:

完成,谢谢大家!!

def f_even(*args): mylist = [] for item in args: if item%2 == 0: mylist.append(item) return mylist

【讨论】:

    【解决方案3】:

    您可以使用yield 稍微修改您的函数并使其成为生成器。这样你的函数在返回第一个偶数后不会结束,而是会一个接一个地产生它们。

    def f_even(*args):
        for item in args:
              if item%2 == 0:
                 yield item
    
    for i in f_even(1,2,3,4,5):
        print(i)
    

    输出:

    2
    4
    

    或者如果你想存储所有产生的值:

    even_numbers = list(f_even(1,2,3,4,5))
    print(even_numbers) # -> [2, 4]
    

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 2015-12-14
      • 2016-06-29
      • 2012-06-06
      • 2020-05-04
      • 2020-12-17
      • 2013-10-28
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多