第2关:函数的返回值 - 可有可无的 return

任务描述
相关知识
将值作为返回值
将函数作为返回值
小结
编程要求
测试说明
任务描述
函数在进行运算处理后,返回的值被称为返回值。函数返回的值是通过return语句执行。返回值能够让我们直接得到函数处理的结果,而不必关心函数内部复杂繁重的运算过程,大大提高了编程效率。本关的主要目标是让学习者了解并掌握函数返回值的相关知识。

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

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

def f():
return 1,‘abc’,‘1234’
print(f())
输出结果:

(1, ‘abc’, ‘1234’)
调用f()函数,程序输出为一个元组,所以函数返回值表面上是33个值,其实是返回一个元组,元组里面有三个不同元素(元组语法上不需要一定带上圆括号)。

将函数作为返回值
我们除了可以将各种类型的值作为返回值外,也可以将函数作为返回值。例如,我们要定义一个函数来求列表中数值元素的和,一般情况下我们是这样定义的:

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:
        x=a
    else:
        x=b 
    for i in range(1,x+1):
        if a%i==0 and b%i==0:
            res=i
    return res
########## End ##########

# 调用函数,并输出最大公约数
print(gcd(a,b))
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 函数返回可有可无的,这取决于函数的设计和使用。如果函数需要返回某个给调用者使用,那么就需要有返回。但是如果函数只是执行一些操作,而不需要返回,那么就可以不用返回。在编写函数时,需要根据实际情况来决定是否需要返回。 ### 回答2: 在编写函数时,通常都会涉及到返回的问题。有些函数可能是没有必要返回的,也就是说可以有返回,也可以没有,但是有些函数必须要有返回才能保证程序正常运行。 那么,什么情况下函数返回可以是可有可无的呢?在这里我们需要区分一下函数的两种作用:函数的执行和函数的计算。对于某些函数而言,它只是单纯地执行一些操作,然后将结果输出到屏幕或文件中,这种函数在执行过程中没有返回的必要;而对于另一些函数,它是用来进行计算的,计算的结果需要返回给调用它的程序,这种函数就必须要有返回。 对于第一类函数而言,它们严格来说并不是返回可有可无,而是可以通过输出到屏幕或文件来代替返回。例如,一个函数可以读取一个文件并将其中的内容显示在屏幕上,它就没有必要返回任何。这类函数的存在可以有效地减少程序代码的冗余度,使其更加简洁。 对于第二类函数而言,一定要有返回。这类函数则涉及到程序中的很多算法和逻辑操作,在计算完成之后必须将结果返回给调用它的程序,以保证程序的正确性和可靠性。 总之,函数返回是否可有可无,是取决于函数的作用目的和实现方式的。对于一些只是执行任务的函数而言,它们可以通过直接输出来代替返回;但对于进行计算的函数而言,必须要进行返回操作。在写函数时,需要根据函数的作用和需求来合理地设置返回,以便确保程序的正确性和可靠性。 ### 回答3: 函数返回是指在函数中通过return语句将数据返回给调用者。在编程中,函数返回通常用来传递计算的结果,也可以用来表示函数执行的状态、异常信息等。 但是,在某些情况下,return语句可以省略,这时函数也可以正常执行。这种情况通常出现在函数没有返回,或者在函数中没有必要返回结果的情况下。在这种情况下,函数执行完毕后会自动返回一个默认,比如None。 在Python中,所有的函数都可以省略return语句,即使函数没有返回,也可以直接使用。例如: ``` def say_hello(): print("Hello, World!") say_hello() ``` 这个函数没有返回,但是依然可以直接调用,输出结果为"Hello, World!"。 当然,如果在函数中使用了return语句,程序的运行结果可能会不同。例如: ``` def add(a, b): return a + b c = add(1, 2) print(c) ``` 这个函数返回,将传入参数a和b相加后返回结果,再将结果赋给c变量。最后输出c的,结果为3。 因此,虽然函数返回有时可有可无,但在具体编程实践中,还是需要根据具体需求来判断是否需要使用return语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别是个逗比吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值