《手把手陪您学Python》28——自定义函数的返回值

在上一篇《手把手陪您学Python》27——自定义函数的参数中,我们学习了自定义函数参数的几种类型。在本篇中,我们将学习自定义函数的返回值,并介绍返回值的应用。

我们已经知道,自定义函数是一个以关键字def开头、关键字return结尾的代码块。其中的return就是返回返回值的关键字。

在前两篇文章中,虽然没有重点讲解,但其实在实例中已经列举了几个使用return返回值的情况,比如返回投骰子的结果,返回胜利者的名字,返回求和或者面积计算的结果等等。

但我们也发现,并不是每一个自定义函数都有返回值的,比如上篇文章中不定长参数的几个实例中,自定义函数就只有def关键字,而没有return关键字。这时,自定义函数只会执行到函数的最后一个命令行(如不定长参数实例中的打印)就结束了,不会再给主程序返回任何结果,或者说只返回控制None。

由于上面两种情况,一种比较简单,只有一个返回值,之前也有实例介绍;另一种不涉及返回值和return语句,也不过多介绍了。今天,我们重点要讲解的是如何返回多个值,这也是我们在后面数据分析中经常需要使用到的一种Python特性。

有一个非常简单的实例可以展示如何返回多个值:

In [1]: def f(): 
            a = 1
            b = 2
            c = 3
            return a, b, c

        a, b, c = f()
        print(a, b, c)

Out[1]: 1 2 3

在这个实例中,自定义函数f()实现了两个目的,一个是定义abc的值,另一个是将abc的值进行返回。

主程序中最重要的一行命令是将abc赋值,并且是与函数的返回值按照顺序一一对应地进行赋值。虽然这里使用的变量名称是一样的,实际上,赋值的过程并不是按照变量名称进行赋值的,关键还是顺序。比如我们可以将变量名称及顺序稍微修改一下,看看会发生什么?

In [2]: def f():
            a = 1
            b = 2
            c = 3
            return a, b, c

        b, a, d = f()
        print(b, a, d)

Out[2]: 1 2 3

我们可以看到,虽然变量名称和顺序发生了改变,但结果仍然是按照返回值的顺序赋值并打印出来的,而没有受到变量名称或者位置的调整而进行改变。

那么,从返回值的这一个特性,不知道大家是否可以联想到我们之前学习过的一种数据结构?没错,就是元组,一种固定长度且不可变的数据结构。

所以,看起来函数返回的是多个值,但实际上返回的只是一个对象,这个对象就是元组。于是,上面的实例中的返回值就可以用一个变量名来接收了。赋值后的变量就是一个元组了,也就具备了元组的所有特性为我们所用了。

In [3]: def f():
            a = 1
            b = 2
            c = 3
            return a, b, c

        tup = f()
        print(tup)

Out[3]: (1, 2, 3)

除了元组,自定义函数还可以通过字典的方式返回多个值。

In [4]: def f():
            a = 1
            b = 2
            c = 3
            return {'A': a, 'B': b, 'C': c}

        dic = f()
        print(dic)
        print(dic['C'])   # 可以应用字典的各类特性

Out[4]: {'A': 1, 'B': 2, 'C': 3}
        3

返回多个值的方法当然也少不了列表了。

In [5]: def f():
            a = 1
            b = 2
            c = 3
            return [a, b, c]

        lst = f()
        print(lst)

Out[5]: [1, 2, 3]

目前,我们已经介绍了通过元组、字典、列表等形式返回值的几种情况,在我们所学习过的数据结构中,还缺少一种形式,那就是集合。我们已经知道,集合与其他集中数据结构最大的不同就是不包含重复值。所以,让我们看一下,如果函数以集合的方式返回值,并且返回值中包括重复元素时会发生什么?

In [6]: def f():
            a = 1
            b = 1
            c = 3
            return {a, b, c}

        set = f()
        print(set)

Out[6]: {1, 3}

正如我们所想的,如果自定义函数的结果中包括重复元素,再以集合的方式返回值,那么重复的元素就会被剔除,返回不包含重复元素的集合。

以上就是自定义函数返回多个返回值的几种情况。

其实,除了第一个实例中是按照顺序给多个不同的变量赋值以外,其他返回多个值的方式,就是在return语句中,通过不同的数据结构,将多个返回值“打包”而已。

如果将这个过程换个方式进行展示,大家就更好理解了。同样还是通过字典返回多个值的实例。

In [7]: def f():
            a = 1
            b = 2
            c = 3
            dic = {'A': a, 'B': b, 'C': c}
            return dic

        dic = f()
        print(dic)

Out[7]: {'A': 1, 'B': 2, 'C': 3}

通过将多个返回值提前“打包”的方式,多个返回值最后就变成了一个返回值的情况。

所以,知道了这个道理,多个返回值就没有什么神秘的了,只不过是少了一行语句,显得更炫酷罢了。

以上就是我们对自定义函数返回值的介绍,虽然形式多样,但关键还是要找到我们最为适合的方式,将一个或者多个值从自定义函数中返回到我们需要的代码行中。

至此,关于自定义函数部分的介绍就告一段落了。

因为函数实在是太重要了,虽然自定义函数介绍完了,但我们还不能离开函数,下一篇,我们将会介绍一种特殊的函数,叫做“匿名函数”,敬请关注。


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

要阅读《手把手陪您学Python》系列文章的其他篇目,请关注公众号点击菜单选择,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

《手把手陪您学Python》16——循环语句while

《手把手陪您学Python》17——循环的终止

《手把手陪您学Python》18——循环语句for

《手把手陪您学Python》19——第一阶段小结

《手把手陪您学Python》20——列表

《手把手陪您学Python》21——元组

《手把手陪您学Python》22——字典

《手把手陪您学Python》23——内置序列函数

《手把手陪您学Python》24——集合

《手把手陪您学Python》25——列表推导式

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数的参数

For Fans:关注“亦说Python”公众号,回复“手28”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

猜你喜欢

转载自blog.csdn.net/mnpy2019/article/details/110679573
今日推荐