【问题标题】:Different Output in Print and Return in Python FunctionPython函数中打印和返回的不同输出
【发布时间】:2021-04-28 04:43:16
【问题描述】:

我想从第一个字母以 s 开头的列表中返回单词,并且我执行了以下 2 个解决方案。一个接近解决方案,另一个是正确的,但不是所需的确切形式。如果我在 python 函数中使用“print”与“return”,我也会得到不同的结果。为什么呢?请指导我。

第一种方法:

def s(opt):
    for a in opt:
        if a[0] == 's':
            return(a)
s(['soup','dog','salad','cat','great'])

我通过运行此代码得到的输出是“汤” - 这也是用引号引起的 - 为什么?

第二种方法:

def s(opt):
    for a in opt:
        if a[0] == 's':
            print(a)
s(['soup','dog','salad','cat','great'])

我通过这种方法得到的输出是汤,垂直形式的沙拉,没有引号等等。为什么?

我的问题是如何通过在函数方法中保留返回来获得所需的输出? 另一个问题为什么在上述方法中使用 print 和 return 时输出会不同?

期望的输出:['soup', 'salad']

【问题讨论】:

  • print 定义为prints the values to a stream;这意味着一旦控件返回给调用者,它就会收到None(相当于return None)。如果您不想获得None 对象,那么您只需要在return 语句中添加一些值(例如return [1, 2])。请注意,一旦 Python 在您的函数中遇到 return 语句,它会立即将控件发送回调用者。

标签: python function return


【解决方案1】:
  1. 使用 return 循环停止并返回值“a”,否则“print”将不会停止循环并继续进行
  2. func return 是 diff,print 只是显示值,return 会返回你以后可以使用的值
def s(opt):
    for a in opt:
        if a[0] == 's':
            return(a)
# r is soup
r = s(['soup','dog','salad','cat','great'])

def s(opt):
    for a in opt:
        if a[0] == 's':
            print(a)
s(['soup','dog','salad','cat','great'])
# z is None
z = s(['soup','dog','salad','cat','great'])

我建议你使用 list 包含你想要的值并返回

def s(opt):
    l = []
    for a in opt:
        if a[0] == 's':
            l.append(a)
    return l

【讨论】:

    【解决方案2】:

    您使用print 的版本可以正常工作,因为它只是打印找到的值,并且在循环结束之前不会从函数返回。它不太有用,因为它返回None,所以你不能使用结果本身——你只能看到打印输出。

    您的return 语句将返回匹配该条件的第一个元素。在此之后,它不会继续检查列表中的其他元素。您需要构造一个 list 的返回值来代替:

    def s(opt):
        result = []
        for a in opt:
            if a[0] == 's':
                result.append(a)
        return result
    
    print(s(['soup', 'dog', 'salad', 'cat', 'great']))
    

    此代码使用list.append 将元素一一添加到result 列表中。然后,在函数的最后,它返回result

    或者,使用list comprehension

    def s(opt):
        return [a for a in opt if a[0] == 's']
    
    print(s(['soup', 'dog', 'salad', 'cat', 'great']))
    

    在这两种情况下,输出都符合要求:

    ['soup', 'salad']
    

    【讨论】:

      【解决方案3】:
      def s(opt):
          matches = []
          for a in opt:
              if a[0] == 's':
                  matches.append(a)
          return matches
      
      s(['soup','dog','salad','cat','great'])
      

      这应该会给出你想要的输出

      【讨论】:

        【解决方案4】:

        这是因为一旦你在函数中返回一个值,函数就会停止。一旦它返回了汤,整个函数就会停止,但是当你打印出每个函数时,你会得到所有的结果。这是您的问题的解决方案:

        def s(opt):
            answers = []
            for a in opt:
                if a[0] == 's':
                    answers.append(a)
            return(answers)
        s(['soup','dog','salad','cat','great'])
        

        【讨论】:

          【解决方案5】:

          使用yield 代替return。当您的条件 if a[0] == 's' 变为真时,s() 函数将返回。

          如果您想在满足您的要求时返回多个值,那么您必须使用另一个列表来存储您的答案,或者您可以使用列表推导

          def s(opt):
              for a in opt:
                  if a[0] == 's':
                      yield a
          
          
          print(list(s(['soup', 'dog', 'salad', 'cat', 'great'])))
          
          # Output
          # ['soup', 'salad']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-23
            • 2010-10-19
            • 1970-01-01
            • 2022-12-09
            • 1970-01-01
            相关资源
            最近更新 更多