Python入门之函数结构——第2关:函数的返回值 - 无关紧要的return

任务描述
函数在进行运算处理后,返回的值被称为返回值。函数返回的值是经过return语句执行。返回值可以让咱们直接获得函数处理的结果,而没必要关心函数内部复杂繁重的运算过程,大大提升了编程效率。web

本关的主要目标是让读者了解并掌握函数返回值的相关知识。编程

相关知识
return语句将值返回到调用函数的出口,函数中必定要有return返回值才是完整的函数。若是咱们没有在函数中定义函数返回值,那么程序会自动让函数返回一个结果,该结果是None对象,而None对象表示没有任何值。闭包

将值做为返回值框架

函数的返回值只有一个,但有时咱们会发现有的函数好像有多个返回值。其实这里的“多个”并非多个返回值,好比函数返回一列表,里面包含不少个元素值。这就相似于:只能从超市带走一个箱子,可是容许咱们把一些东西都装到箱子里面看作一个东西带走。例如:svg

def f():
return 1,‘abc’,‘1234’函数

print(f())
输出结果:测试

(1, ‘abc’, ‘1234’)xml

调用f()函数,程序输出为一个元组,因此函数返回值表面上是3个值,实际上是返回一个元组,元组里面有三个不一样元素(元组语法上不须要必定要带上圆括号)。对象

将函数做为返回值utf-8

咱们除了能够将各类类型的值做为返回值外,也能够将函数做为返回值。

例如,咱们要定义一个函数来求列表中数值元素的和,通常状况下咱们是这样定义的:

def plus(*args):
s = 0
for n in args:
s = s + n
return s
可是,若是咱们不须要马上求和,而是在后面的程序中,根据需求再计算怎么办?这时咱们定义的函数能够不返回求和的结果,而是返回计算求和的函数!

因此咱们还能够用以下方法定义函数:

def lazy_plus(*args):
def plus():
s = 0
for n in args:
s = s + n
return s
return plus
当咱们调用lazy_plus()时,返回的并非求和结果,而是计算求和的函数:

#定义求和函数,返回的并非求和结果,而是计算求和的函数
def lazy_plus(*args):
def plus():
s = 0
for n in args:
s = s + n
return s
return plus

#调用lazy_plus()时,返回的并非求和结果,而是求和函数
f = lazy_plus(1,2,3,4,5)
print(f)
输出结果:

<function lazy_plus..plus at 0x000001DAC97F9950>

调用函数f时,才真正计算求和的结果:

#定义求和函数,返回的并非求和结果,而是计算求和的函数
def lazy_plus(*args):
def plus():
s = 0
for n in args:
s = s + n
return s
return plus()

#调用函数f时,获得真正求和的结果
f = lazy_plus(1,2,3,4,5)
print(f())
输出结果:

15

在上述例子中,咱们在函数lazy_plus中又定义了函数plus,并且内部函数plus是能够引用外部函数lazy_plus的参数和局部变量的,当函数lazy_plus返回函数plus时,相关参数和变量也将会保存在返回的函数中,这种方式也称为“闭包(Closure)”。

小结:咱们除了能够将函数计算的值做为返回值外,也能够将函数做为返回值。

若是您想了解更多有关列表操做知识,请参考:【美】Eric Matthes著《Python编程——从入门到实践》第八章。

编程要求
本关的编程任务是补全src/step2/return.py文件的代码,实现相应的功能。具体要求以下:

定义一个函数gcd,功能是求两个正整数的最大公约数;
调用函数gcd,获得输入的两个正整数的最大公约数,并输出这个最大公约数。
本关涉及的代码文件src/step2/return.py的代码框架以下:

#coding=utf-8

#输入两个正整数a,b
a = int(input())
b = int(input())

请在此添加代码,求两个正整数的最大公约数

#********** Begin *********#

#********** End **********#

#调用函数,并输出最大公约数
print(gcd(a,b))
测试说明
本关的测试文件是src/step2/return.py,测试过程以下:

平台自动编译生成return.exe;
平台运行return.exe,并以标准输入方式提供测试输入;
平台获取return.exe输出,并将其输出与预期输出对比。若是一致则测试经过,不然测试失败。
如下是平台对src/step2/return.py的样例测试集:

测试输入:
1
8
预期输出:
1

测试输入:
9
3
预期输出:
3

测试输入:
9
21
预期输出:
3

测试输入:
126
36
预期输出:
18

开始你的任务吧,祝你成功!

总有人比本身更优秀、更帅、更春风得意。接受这个现实,但你仍是要作本身心中的王。

若是你以为这一关的内容对你有帮助,请你在下面点赞。

参考答案

#coding=utf-8

#输入两个正整数a,b
a = int(input())
b = int(input())

请在此添加代码,求两个正整数的最大公约数

#********** Begin *********#
def gcd(a, b):
if a < b:
smaller = a
else:
smaller = b
for i in range(1, smaller + 1):
if a % i == 0 and b % i == 0:
res = i
return res

#********** End **********#

#调用函数,并输出最大公约数 print(gcd(a,b))