Python入门之函数结构——第2关:函数的返回值 – 可有可无的return

  • Post author:
  • Post category:python



任务描述

函数在进行运算处理后,返回的值被称为返回值。函数返回的值是通过

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. 平台自动编译生成

    return.exe

    ;
  2. 平台运行

    return.exe

    ,并以标准输入方式提供测试输入;
  3. 平台获取

    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))



版权声明:本文为u012589022原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。