Python⼊门之函数结构——第2关:函数的返回值-可有可⽆的
return
任务描述
函数在进⾏运算处理后,返回的值被称为返回值。函数返回的值是通过return语句执⾏。返回值能够让我们直接得到函数处理的结果,⽽不必关⼼函数内部复杂繁重的运算过程,⼤⼤提⾼了编程效率。
本关的主要⽬标是让读者了解并掌握函数返回值的相关知识。
相关知识
return语句将值返回到调⽤函数的出⼝,函数中⼀定要有return返回值才是完整的函数。如果我们没有在函数中定义函数返回值,那么程序会⾃动让函数返回⼀个结果,该结果是None对象,⽽None对象表⽰没有任何值。
将值作为返回值
函数的返回值只有⼀个,但有时我们会发现有的函数好像有多个返回值。其实这⾥的“多个”并不是多个
返回值,⽐如函数返回⼀列表,⾥⾯包含很多个元素值。这就类似于:只能从超市带⾛⼀个箱⼦,但是允许我们把⼀些东西都装到箱⼦⾥⾯看做⼀个东西带⾛。例如:
def f():
return 1,'abc','1234'
print(f())
输出结果:
(1, 'abc', '1234')
调⽤f()函数,程序输出为⼀个元组,所以函数返回值表⾯上是3个值,其实是返回⼀个元组,元组⾥⾯有三个不同元素(元组语法上不需要⼀定要带上圆括号)。
将函数作为返回值
我们除了可以将各种类型的值作为返回值外,也可以将函数作为返回值。
例如,我们要定义⼀个函数来求列表中数值元素的和,⼀般情况下我们是这样定义的:
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.<locals>.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,测试过程如下:
1. 平台⾃动编译⽣成;
2. 平台运⾏,并以标准输⼊⽅式提供测试输⼊;
3. 平台获取输出,并将其输出与预期输出对⽐。如果⼀致则测试通过,否则测试失败。以下是平台对src/step2/return.py的样例测试集:
测试输⼊:
1
8
预期输出:
1
测试输⼊:
9
3
预期输出:
3python新手函数
测试输⼊:
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))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。