python系列教程195

朋友们,如需转载请标明出处:blog.csdn.net/jiangjunsho…

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

因为return能够返回任意种类的对象,所以它也能够返回多个值——需要将这些值封装进一个元组或其他的集合类型。

>>>def multiple(x,y):

...    x = 2                  # Changes local names only

...    y = [3,4]

...    return x,y            # Return new values in a tuple

...

>>>X = 1

>>>L = [1,2]

>>>X,L = multiple(X,L)      # Assign results to caller's names

>>>X,L

(2,[3,4]

看起来这里的代码好像返回了两个值,但是实际上只有一个:一个包含有2个元素的元组,它的圆括号是可选的,这里省略了。在调用返回之后,我们能够使用元组赋值去分解这个返回元组的组成部分。这段代码的实际效果就是通过明确的赋值模拟了其他语言中的输出参数。

顺带说一下,在Python 2.6中,可以在传递给函数的参数中自动解包元组。在Python 2.6中,通过如下头部定义的一个函数:

def f((a,(b,c))):

可以用与期望的结构匹配的元组来调用:f((1,(2,3)))分别给a、b和c赋值为1、2和3。这个def语法在Python 3.0中不再支持,而要像下面这样编写函数:

def f(T: (a,(b,c)) = T

以便在一条显式赋值语句中解包。这种显式形式在Python 3.0和Python 2.6中都有效。参数解包在Python 2.X中是一个含糊并且很少用到的功能。此外,Python 2.6中的函数头部只支持序列赋值的元组形式;更通用的序列赋值(例如,def f((a,[b,c])):)在Python 2.6中因语法问题而无效,并且必须用显式赋值形式。