What is the purpose of the return statement?
返回语句是什么的简单基本解释是什么,如何在Python中使用它?
它和
例如,这里有一个同时使用
1 2 3 | def foo(): print("hello from inside of foo") return 1 |
现在可以运行调用foo的代码,如下所示:
1 2 3 4 5 | if __name__ == '__main__': print("going to call foo") x = foo() print("called foo") print("foo returned" + str(x)) |
如果您将其作为脚本(如
1 2 3 4 | going to call foo hello from inside foo called foo foo returned 1 |
我希望这能更清楚些。解释器将返回值写入控制台,这样我就能明白为什么会有人被混淆。
下面是来自解释器的另一个示例,演示了:
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> def foo(): ... print("hello from within foo") ... return 1 ... >>> foo() hello from within foo 1 >>> def bar(): ... return 10 * foo() ... >>> bar() hello from within foo 10 |
您可以看到,当从
我想这本词典是你最好的参考资料
返回并打印
简而言之:
当print生成文本时,return返回或答复函数的调用方
把print语句看作是产生了一个副作用,它使您的函数向用户写出一些文本,但另一个函数不能使用它。
我将尝试用一些例子和一些维基百科的定义来更好地解释这一点。
这是维基百科中一个函数的定义。
在数学中,一个函数将一个量,即函数的参数(也称为输入)与另一个量,即函数的值(也称为输出)相关联。
想一想。当你说函数有一个值的时候,它意味着什么?
它的意思是你可以用一个正常值来代替一个函数的值!(假设两个值的类型相同)
你为什么要这样问?
其他可以接受与输入相同类型值的函数呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 | def square(n): return n * n def add_one(n): return n + 1 print square(12) # square(12) is the same as writing 144 print add_one(square(12)) print add_one(144) #These both have the same output |
对于只依赖输入来产生输出的函数,有一个奇特的数学术语:参照透明。同样,维基百科的定义。
引用透明性和引用不透明性是计算机程序部分的属性。如果一个表达式可以用它的值替换而不改变程序的行为,那么就说它是引用透明的。
如果您刚开始编程,可能会有点难以理解这意味着什么,但我认为您将在一些实验之后得到它。不过,一般来说,您可以在函数中执行print之类的操作,并且在末尾也可以有一个RETURN语句。
请记住,当您使用RETURN时,您基本上是在说"对该函数的调用与写入返回的值相同"。
如果拒绝输入自己的值,python实际上会为您插入一个返回值,它被称为"none",它是一个特殊的类型,只意味着什么都没有,或者为空。
在Python中,我们开始用"def"定义一个函数,通常(但不一定)以"return"结束函数。
变量x的函数表示为f(x)。这个函数的作用是什么?假设这个函数加2到x,那么,f(x)=x+2
现在,这个函数的代码是:
1 2 | def A_function (x): return x + 2 |
定义函数后,可以将其用于任何变量并获得结果。例如:
1 2 | print A_function (2) >>> 4 |
我们只需编写稍微不同的代码,例如:
1 2 3 4 | def A_function (x): y = x + 2 return y print A_function (2) |
这也将给出"4"。
现在,我们甚至可以使用以下代码:
1 2 3 4 | def A_function (x): x = x + 2 return x print A_function (2) |
也就是说4。请看,返回旁边的"x"实际上意味着(x+2),而不是"a_函数(x)"的x。
我想从这个简单的例子中,您可以理解RETURN命令的含义。
以上未讨论的案例。RETURN语句允许您在到达末尾之前终止函数的执行。执行流立即返回调用方。
第9行:
1 2 3 4 5 6 7 8 9 10 | def ret(n): if n > 9: temp ="two digits" return temp #Line 4 else : temp ="one digit" return temp #Line 8 return #Line 9 print ("return statement") ret(10) |
在执行条件语句之后,函数ret()由于返回而终止(第9行)。因此,打印("返回语句")不会被执行。
1 | output : two digits |
在返回语句或控制流未到达的位置之后出现的代码是死代码。
返回值在第4行和第8行中,RETURN语句用于在执行条件后返回临时变量的值。
要显示打印和返回之间的差异:
1 2 3 4 5 6 7 8 9 10 11 12 13 | def ret(n): if n > 9: print("two digits") return"two digits" else : print("one digit") return"one digit" return ret(25) output : two digits 'two digits' |
在python repl中,默认情况下会向屏幕输出一个函数返回(这与print不同)。
这是一个打印示例:
1 2 3 4 5 6 7 8 9 10 | >>> n ="foo bar" #just assigning a variable. No output >>> n #the value is output, but it is in a"raw form" 'foo bar' >>> print n #the is now a newline foo bar >>> |
这是一个返回示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> def getN(): ... return"foo bar" ... >>> getN() #When this isn't assigned to something, it is just output 'foo bar' >>> n = getN() # assigning a variable to the return value. No output >>> n #the value is output, but it is in a"raw form" 'foo bar' >>> print n #the is now a newline foo bar >>> |
再加上@nathan hughes的绝妙回答:
下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> def make_3_characters_long(some_string): ... if len(some_string) == 3: ... return False ... if str(some_string) != some_string: ... return"Not a string!" ... if len(some_string) < 3: ... return ''.join(some_string,'x')[:,3] ... return some_string[:,3] ... >>> threechars = make_3_characters_long('xyz') >>> if threechars: ... print threechars ... else: ... print"threechars is already 3 characters long!" ... threechars is already 3 characters long! |
有关使用
"返回"和"打印"之间的区别也可以在以下示例中找到:
返回:
1 2 3 4 5 6 7 | def bigger(a, b): if a > b: return a elif a <b: return b else: return a |
上述代码将为所有输入提供正确的结果。
打印:
1 2 3 4 5 6 7 | def bigger(a, b): if a > b: print a elif a <b: print b else: print a |
注意:对于许多测试用例,这将失败。
错误:
1 | ---- |
1 | Expected result: 8 |
江户十一〔3〕江户十一〔6〕号
1 | Expected result: 4 |
1 | Expected result: 3 |
函数是一个接受参数并返回值的过程。
例子:
1 2 | def timestwo(x): return x*2 |
这是我的理解。(希望它能帮助别人,而且是正确的)。
1 2 3 4 5 6 | def count_number_of(x): count = 0 for item in x: if item =="what_you_look_for": count = count + 1 return count |
所以这段简单的代码计算了一些事情发生的次数。回报的位置很重要。它告诉你的程序你在哪里需要这个值。因此,当您打印时,您将输出发送到屏幕。当你返回时,告诉值去某个地方。在这种情况下,您可以看到count=0与return缩进-我们希望值(count+1)替换0。如果在进一步缩进RETURN命令时尝试遵循代码逻辑,则输出将始终为1,因为我们不会告诉初始计数发生更改。我希望我做对了。哦,返回总是在函数内部。
关于
请遵循以下代码以更好地理解
代码1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | def add(a, b): print"ADDING %d + %d" % (a, b) return a + b def subtract(a, b): print"SUBTRACTING %d - %d" % (a, b) return a - b def multiply(a, b): print"MULTIPLYING %d * %d" % (a, b) return a * b def divide(a, b): print"DIVIDING %d / %d" % (a, b) return a / b print"Let's do some math with just functions!" age = add(30, 5) height = subtract(78, 4) weight = multiply(90, 2) iq = divide(100, 2) print"Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq) # A puzzle for the extra credit, type it in anyway. print"Here is a puzzle." what = add(age, subtract(height, multiply(weight, divide(iq, 2)))) print"That becomes:", what,"Can you do it by hand?" |
我们现在为
当您想向用户显示有意义的和期望的输出,并且不想让屏幕上出现用户不感兴趣的中间结果时,尽管这些结果有助于调试代码,但应该使用
下面的代码说明如何正确使用
1 2 3 4 5 6 | def fact(x): if x < 2: return 1 return x * fact(x - 1) print(fact(5)) |
这一解释适用于所有编程语言,而不仅仅是Python。