参数前的*号
可变参数的顺序
特殊参数斜杠(/)和星号(*)
如果参数只有*号,而无标识符,说明不接收任何实际参数,但它强制它后面的参数只能用关键字传递的作用不变。请看下面的程序和运行结果。
从上面的程序中可以看到,*号前面的参数还是既可以按位传递也可以用关键字传递。请看下图代码和运算结果。
函数p(x,y),x是横坐标,y是纵坐标。简简单单的一个函数,调用就有四种方法。关键字输入也有弊端——参数多的情况下核对前面几个必选参数有些困难,如果想参数只能按位传递应该怎么办?
Python提供特殊参数斜杆(/),规定斜杆前的参数只能按位传递。在上例函数参数中最后加入(/)的程序和运行结果。
如果两个特殊参数都有,那要符合什么要求呢?先看下面的程序和运行结果。
函数的定义没通过语法检查,即函数定义有语法错误。说明“*”号不可以在“/”号之前。
由上面的测试得到特殊参数的使用规则:斜杆(/)和星号(*)可以单独使用,如果两者同时使用,斜杆(/)必须在星号(*)之前,斜杆(/)之前的参数必须按位传递;星号(*)之后的参数必须按关键字传递;斜杆(/)和星号(*)之间如果有参数,可以按位传递也可以按关键字传递。
星号(*)参数是否可以与带*参数同时使用呢?
可见,星号(*)参数不可以与带*参数同时使用,也就是说带*参数同时具有星号(*)参数的作用。
参数前的**号
由于按位传递务必要在按关键字传递之前,带**号参数收集所有它之前未匹配的关键字参数,那么带**号的参数之后不能再有参数,即带**号的参数总是在最后。
逆向参数收集
练习题
第一题:
第二题:
第三题:
第四题:
第五题: