函数的返回值 - 可有可无的 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)

小结

  • 我们除了可以将函数计算的值作为返回值外,也可以将函数作为返回值。

编程要求

实现相应的功能。具体要求如下:

1.定义一个函数gcd,功能是求两个正整数的最大公约数;
2.调用函数gcd,得到输入的两个正整数的最大公约数,并输出这个最大公约数。

测试输入:

1
8

预期输出:

1

测试输入:

9
3

预期输出:

3

测试输入:

9
21

预期输出:

3

测试输入:

126
36

预期输出:

18

方式一 上代码:

rect python返回值 python return返回值返回到哪里_rect python返回值

方式二 上代码:

rect python返回值 python return返回值返回到哪里_元组_02

如果注释理解有误,请大佬们多多评论指教!!