“退货”的确切功能是什么,我应该在何时何地使用它?

时间:2018-08-15 10:21:06

标签: python for-loop return

我在哪里放“回车”有什么区别?它给了我一个不同的答案,我真的很困惑。

正确:

  <div [innerHTML]="ques.ans | safeHtml"></div>

和错误的答案:

def grades_sum(scores):
  total=0
  for i in scores:
    total+=i
  return total
  print (total)

grades_sum(grades)

此外,为什么在此方差函数中包含返回值却给我错误的答案:

def grades_sum(scores):
  total=0
  for i in scores:
    total+=i
    return total
  print (total)

grades_sum(grades)

这是正确的:

def grades_variance(scores):
  average=grades_average(scores)
  variance=0
  for score in scores:
    variance+=(average-score)**2
  return variance/len(scores)
print (grades_variance(grades))

4 个答案:

答案 0 :(得分:2)

print()函数在控制台中写入一个字符串,即“ prints”。

return语句使您的函数退出并将值返回给其调用方。

通常,函数的要点是接受输入并返回某些东西。

当函数准备向其调用者返回值时,使用return语句。

例如,这是一个同时使用print()return的函数:

def foo():
    print("print foo")
    return "return from foo"

现在,您可以运行调用foo的代码,如下所示:

if __name__ == '__main__':
    print("before foo")
    x = foo()
    print("after foo")
    print("foo returned - " + str(x))

如果将其作为脚本(例如.py文件)而不是在Python解释器中运行,则会得到以下输出:

before foo
print foo
after foo   
foo returned - return from foo

在您的第一个代码段中:

def grades_sum(scores):
  total=0
  for i in scores:
    total+=i               #for loop definition
  return total             #return is after for loop completes. 
  print (total)

grades_sum(grades)

returnfor循环完成之后。 for循环在遇到return语句之前成功计算了一些,并且代码流返回到函数调用者-因此,它给出正确的输出。

在第二个片段中,returnfor循环内。这意味着代码流将在第一次迭代本身后返回(&尚未完全计算出总和)-因此,这将产生错误的输出。

您的第3个代码段和第4个代码段示例不正确,因为第3个代码段返回了某些内容,第4个代码根本不返回任何内容-因此无法更正。

答案 1 :(得分:2)

  

我在哪里放“回车”有什么区别?它给了我一个不同的答案,我真的很困惑。

调用return时,将结束函数并将执行流程返回给调用函数。您放置在return旁边的值可以视为函数的输出


下面是一个示例函数,该函数在调用时返回10(给出10的输出):

def my_function():
    return 10

如果我像这样在控制台中调用函数:

my_function()

我的输出(返回值)为10

如果我像这样在函数中添加一个print值:

def my_function():
    print ('This should work')
    return 10

然后该函数现在将在调用时打印。

但是,如果我将print语句放置在return语句之后,如下所示:

def my_function():
    return 10
    print ('This should work')

然后,该功能将像以前一样在控制台中输出10,并且不打印任何内容。这是因为该函数在到达print之前已经结束,因此它永远不会执行。


现在为您的示例:

def grades_sum(scores):
    total=0
    for i in scores:
        total+=i
    return total
    print (total)

grades_sum(grades)

在此示例中,您已将print放在函数中的return之后。由于函数的执行已在此时终止,因此print不被调用。如果运行该函数,它将为您提供作为输出返回的值(正确的答案,因为您允许该函数在退出前在for循环的每个循环中运行)。因此,如果您在控制台中运行它,您仍然会看到正确的答案。尽管这不是您致电print的结果。

def grades_sum(scores):
  total=0
  for i in scores:
    total+=i
    return total
  print (total)

grades_sum(grades)

在此示例中,return放置在for循环内。每个循环都会重复调用for循环内的所有内容。但是,在这种情况下,在循环的第一个周期,您调用return,正如我已经提到的,它结束了该函数。在这种情况下,它将返回第一个分数的值(因为在返回之前只有一个循环完成了)。同样,print不会被调用,因为它位于函数内部,并且被放置在函数的退出点之后(return之后)。

您的最后2个示例没有意义,因为最后一个代码片段将不会打印任何内容(因为该函数没有返回值)。因此,我实际上不确定要从该功能获得什么。也许编辑问题以提供输入数据和所需输出数据的样本。

答案 2 :(得分:1)

return做什么?”

return语句将值返回给函数的调用者。这是一个简单的示例:

def give_me_a_number():
    return 7

现在,give_me_a_number将始终返回7,因此我们可以这样做:

x = give_me_a_number()

变量x现在具有值7,因为这就是give_me_a_number返回的值。


“我将return放在哪里有什么区别?”

放置return语句的位置很重要,因为语句是顺序执行的,遇到return时,函数结束。例如:

def my_function():
    a = 1
    a = 2
    return a
    a = 3

函数my_function将返回值2,因为遇到a时,它就是return的值。请注意,a = 3永远不会执行。


问题中的代码(return循环内的for

在您的情况下,如果return语句缩进,则它位于for块中,并且将在第一次执行for循环时执行,因此这意味着并非所有{{ 1}}将被循环通过。

scores

如果未缩进,则它在def grades_sum(scores): total=0 for i in scores: total+=i return total print (total) 循环之外,并且将在所有for通过scores循环后执行。

答案 3 :(得分:0)

第一代码段没有任何意义。因为您的退货在打印之前。什么都没打印。

没有意义,因为您在第一次循环迭代中返回。结果可能不正确。

我怀疑第四是否打印除None以外的任何内容。

第三代码段返回可打印的内容。