本文说说自己对 Python 序列类型和函数参数类型的理解。
注意:内容基于 Python 3.6
序列类型(Sequence Type)
我们先来看个例子
上面的操作叫做「多重赋值」,其实,只要是「序列类型」的,都可以有这种操作。
序列类型包括这几种:列表(list)、元组(tuple)、range、str、binary sequence type
所以,我们看到下面的用法就不奇怪了
这个也好理解
当然,「序列类型」还有很多类似的操作
函数参数类型
共有三种:位置参数(Positional Arguments)、可变参数(Arbitrary Arguments)、关键字参数(Keyword Arguments)。
先有个整体的认识。函数定义如下
调用
输出如下
其中,name 为「位置参数」, 为「可变参数」, 为「关键字参数」。
「位置参数」是指函数调用时根据参数位置进行赋值
「可变参数」,个人理解就是用来解决不确定参数的问题的
args 是一个元组,函数调用时,除掉「位置参数」用掉的参数,剩下的都会按顺序放到这个元组。
「关键字参数」是指以 形式定义的参数
extra_info 是一个字典,由与前面参数对应不上的「关键字参数」组成。
相信很多朋友看到这,都有点疑惑,这「位置参数」和「关键字参数」怎么区分呢?我的理解是不用区分。理由如下
「位置参数」和「关键字参数」是一个相对的概念,不用去死磕。有的把三个参数都当作「位置参数」,有的把三个参数都当作「关键字参数」,有的把第一个当作「位置参数」,后面两个当作「关键字参数」。理解上其实都没问题,我们只要明白在各种情况下如何使用就好。(不过我个人倾向于最后一种理解)
另外需要注意下相关的两个操作
最后来个总结,放出本小节的第一个函数定义
当「位置参数」、「可变参数」和「关键字参数」同时存在时,「可变参数」在「关键字参数」之前,「位置参数」在最前。「位置参数」和「关键字参数」没必要强行去区分,有自己的合理理解即可。还有就是理解函数调用时, 可以用于解包「列表」(或其它「序列类型」), 可以用于解包「字典」。