Python小知识点:函数多个返回值与取值

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

你可能感兴趣的:(Python小知识点,python)