Python函数返回多个值
可以这么写:
def add(a,b):
return a,b
其实本质上来说应该是下面这个(因为ta其实返回的是一个元组)
def add(a,b):
return (a,b)
注:按元组返回的时候可以不加括号()
如何获得函数的返回值?
第一个方法:
用切片取值
add(1,2)[0]
add(1,2)[1]
第二个方法:
用多个变量接受返回值:(推荐)
a,b = add(1,2)
2022年5月27日,关于返回值,追加几个小知识点:
1、不要把函数的多个返回值拆分到3个以上的变量中
2、对于函数返回的多个值,没有被变量捕获的,全放到一个加*的变量里
3、把返回值拆分到四个及以上的,很容易出错。尽量不要那么干。
例如:
我先定义一个函数,返回了6个值
def strs():
str1 = "Hello"
str2 = "World"
return len(str1), len(str2),str1.upper(), str2.lower(),str1.count("l"),str2.count("W")
要获取这函数的6个返回值,那么按以前的写法是:
a,b,c,d,e,f = strs()
这样我就用abcdef这6个变量获取了strs()的6个返回值。
这样做会有什么问题呢?
1、顺序可能会搞错。使用返回值的时候得一个一个的对。这只是6个返回值,如果增加到16个呢?60个呢?出现bug的时候很难查。
2、调用函数并拆分函数的那句代码会很长,有可能会换行。让代码看起来很别扭。
那除了这种常规写法,还有其他写法么?
可以试试Python的unpacking机制
如:用一个带*号的变量,接受暂时用不到的返回值,用普通变量接受需要的返回值。
a ,*b,f = strs()#right
比如这里,我们需要返回值的第一个和最后一个,中间的不需要。则第一个返回值用a来接收,最后一个返回值用f来接收,其他不需要的用*b来接收。
如果需要*b里边的内容,可以用列表的取值方式将其取出
(注:*b本质是一个list列表。)
另外:一个赋值语句,不能有多个*的存在,也就是不能写成下面的方式,解释器会报错
a ,*b,c,*d,f = strs()#wrong