在上一篇《手把手陪您学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”,即可免费下载本篇文章所用示例语句。